telega-0.2.9: Network/API/Telegram/Bot/Core.hs
module Network.API.Telegram.Bot.Core (Telegram, telegram, ask', Token (..), Ok, result) where
import "aeson" Data.Aeson (FromJSON (parseJSON), withObject, (.:))
import "base" Control.Applicative (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 "base" Text.Show (Show)
import "text" Data.Text (Text)
import "transformers" Control.Monad.Trans.Reader (ReaderT (runReaderT), ask)
import "transformers" Control.Monad.Trans.Except (ExceptT, runExceptT)
newtype Token = Token Text deriving Eq
type Telegram e a = ReaderT (e, Token) (ExceptT SomeException IO) a
telegram :: Token -> e -> Telegram e a -> IO (Either SomeException a)
telegram token env = runExceptT . flip runReaderT (env, token)
ask' :: Telegram e e
ask' = fst <$> ask
data Ok a = Ok Bool a deriving Show
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"