module Network.API.Telegram.Bot.Object.Chat (module Exports, Chat, ID (..)) where

import Network.API.Telegram.Bot.Object.Chat.Group as Exports
import Network.API.Telegram.Bot.Object.Chat.Conversation as Exports
import Network.API.Telegram.Bot.Object.Chat.Channel as Exports

import "base" Data.Functor ((<$>))
import "base" Data.Int (Int64)

import Network.API.Telegram.Bot.Property (Accessible (access), ID)

data Chat

data instance ID Chat = CHAT Int64

instance Accessible (ID Chat) Channel where
        access f (Channel i title) = (\(CHAT i') -> Channel i' title) <$> f (CHAT i)

instance Accessible (ID Chat) Conversation where
        access f (Conversation i) = (\(CHAT i') -> Conversation i') <$> f (CHAT i)

instance Accessible (ID Chat) Group where
        access f (Basic i title) = (\(CHAT i') -> Basic i' title) <$> f (CHAT i)
        access f (Super i title description) = (\(CHAT i') -> Super i' title description) <$> f (CHAT i)