telega-0.1.5: Network/Telegram/API/Bot/Property/Accessible.hs
module Network.Telegram.API.Bot.Property.Accessible (Accessible (..)) where
import "base" Data.Function (flip)
import "base" Data.Functor ((<$>))
import "lens" Control.Lens (Lens')
import Network.Telegram.API.Bot.Object (Object)
import Network.Telegram.API.Bot.Object.Callback (Callback (Datatext))
import Network.Telegram.API.Bot.Object.Chat (Chat)
import Network.Telegram.API.Bot.Object.From (From)
import Network.Telegram.API.Bot.Object.Message (Message (Textual, Command))
import Network.Telegram.API.Bot.Object.Moving (Moving (Gone, Joined))
import Network.Telegram.API.Bot.Object.Update (Update (Query, Membership, Incoming))
class Object source => Accessible target source where
access :: Lens' source target
instance Accessible Chat Callback where
access f (Datatext cq_id msg dttxt) = flip
(Datatext cq_id) dttxt <$> access f msg
instance Accessible Chat Message where
access f (Textual msg_id chat from txt) = (\chat' -> Textual msg_id chat' from txt) <$> f chat
access f (Command msg_id chat from cmd) = (\chat' -> Command msg_id chat' from cmd) <$> f chat
instance Accessible Chat Moving where
access f (Gone chat from) = (\chat' -> Gone chat' from) <$> f chat
access f (Joined chat froms) = (\chat' -> Joined chat' froms) <$> f chat
instance Accessible Chat Update where
access f (Incoming upd_id msg) = Incoming upd_id <$> access f msg
access f (Query upd_id cb) = Query upd_id <$> access f cb
access f (Membership upd_id mmb) = Membership upd_id <$> access f mmb
instance Accessible From Callback where
access f (Datatext cq_id msg dttxt) = flip
(Datatext cq_id) dttxt <$> access f msg
instance Accessible From Message where
access f (Textual msg_id chat from txt) = (\from' -> Textual msg_id chat from' txt) <$> f from
access f (Command msg_id chat from cmd) = (\from' -> Command msg_id chat from' cmd) <$> f from