telega-0.3.0: Network/API/Telegram/Bot/Core.hs
module Network.API.Telegram.Bot.Core (Telegram, telegram, environment, Token (..), Ok, result) where
import "aeson" Data.Aeson (FromJSON (parseJSON), withObject, (.:))
import "base" Control.Applicative ((<*>))
import "base" Control.Exception (SomeException)
import "base" Data.Bool (Bool (True, False))
import "base" Data.Eq (Eq)
import "base" Data.Either (Either)
import "base" Data.Function (flip, (.), ($))
import "base" Data.Functor ((<$>))
import "base" Data.Maybe (Maybe (Just, Nothing))
import "base" Data.Tuple (fst)
import "base" System.IO (IO)
import "joint" Control.Joint (Reader, run, lift, get, (:>))
import "text" Data.Text (Text)
newtype Token = Token Text deriving Eq
type Telegram e = Reader (e, Token) :> Either SomeException :> IO
telegram :: Token -> e -> Telegram e a -> IO (Either SomeException a)
telegram token env = run . flip run (env, token)
environment :: forall e . Telegram e e
environment = fst <$> lift @(Reader (e, Token)) get
data Ok a = Ok Bool a
result :: Ok a -> Maybe a
result (Ok True x) = Just x
result (Ok False _ ) = Nothing
instance FromJSON a => FromJSON (Ok a) where
parseJSON = withObject "Ok" $ \v ->
Ok <$> v .: "ok" <*> v .: "result"