packages feed

telega-0.1.5: Network/Telegram/API/Bot/Property/Identifiable.hs

module Network.Telegram.API.Bot.Property.Identifiable (Identifiable (..), Identificator) where

import "base" Data.Int (Int, Int64)

import Network.Telegram.API.Bot.Object (Object)
import Network.Telegram.API.Bot.Object.Chat (Chat (Private, Group, Supergroup, Channel))
import Network.Telegram.API.Bot.Object.From (From (Bot, User))
import Network.Telegram.API.Bot.Object.Message (Message (Textual, Command))
import Network.Telegram.API.Bot.Object.Update (Update (Query, Membership, Incoming))

type family Identificator o = i

class Object o => Identifiable o where
	{-# MINIMAL identificator #-}
	identificator :: o -> Identificator o

type instance Identificator Chat = Int64
type instance Identificator From = Int
type instance Identificator Message = Int
type instance Identificator Update = Int

instance Identifiable Chat where
	identificator (Private i) = i
	identificator (Group i _) = i
	identificator (Supergroup i _) = i
	identificator (Channel i _) = i

instance Identifiable From where
	identificator (Bot i _ _ _ _) = i
	identificator (User i _ _ _ _) = i

instance Identifiable Message where
	identificator (Textual i _ _ _) = i
	identificator (Command i _ _ _) = i

instance Identifiable Update where
	identificator (Query i _) = i
	identificator (Membership i _) = i
	identificator (Incoming i _) = i