Safe Haskell | None |
---|---|
Language | Haskell2010 |
Synopsis
- type API s e a = APIT s e IO a
- type APIT s e m a = ExceptT (APIError e) (ReaderT Manager (StateT Builder (StateT s m))) a
- execAPI :: MonadIO m => Builder -> s -> APIT s e m a -> m (Either (APIError e) a)
- runAPI :: MonadIO m => Builder -> Manager -> s -> APIT s e m a -> m (Either (APIError e) a, Builder, s)
- runRoute :: (Receivable a, ErrorReceivable e, MonadIO m) => Route -> APIT s e m a
- sendRoute :: (MonadIO m, Sendable t, ErrorReceivable e, Receivable r) => t -> Route -> APIT s e m r
- routeResponse :: (MonadIO m, ErrorReceivable e) => Route -> APIT s e m (Response ByteString)
- routeRequest :: Builder -> Route -> Maybe Request
- liftExcept :: Monad m => ExceptT (APIError e) (ReaderT Manager (StateT Builder (StateT s m))) a -> APIT s e m a
- liftEither :: Monad m => ExceptT (APIError e) (ReaderT Manager (StateT Builder (StateT s m))) a -> APIT s e m a
- liftManager :: Monad m => ReaderT Manager (StateT Builder (StateT s m)) a -> APIT s e m a
- liftBuilder :: Monad m => StateT Builder (StateT s m) a -> APIT s e m a
- liftState :: Monad m => StateT s m a -> APIT s e m a
- name :: Monad m => Text -> APIT s e m ()
- baseURL :: Monad m => Text -> APIT s e m ()
- customizeRoute :: Monad m => (Route -> Route) -> APIT s e m ()
- customizeRequest :: Monad m => (Request -> Request) -> APIT s e m ()
API
type API s e a = APIT s e IO a Source #
Main API type. s
is the API's internal state, e
is the API's custom error type,
and a
is the result when the API runs. Based on the APIT
transformer.
type APIT s e m a = ExceptT (APIError e) (ReaderT Manager (StateT Builder (StateT s m))) a Source #
Main API transformer type. s
is the API's internal state, e
is the API's custom error type,
and a
is the result when the API runs.
Running the API
:: MonadIO m | |
=> Builder | initial |
-> s | initial state |
-> APIT s e m a | the actual |
-> m (Either (APIError e) a) | IO action that returns either an error or the result |
Runs an API
by executing its transformer stack and dumping it all into IO
. Only returns the actual result.
:: MonadIO m | |
=> Builder | initial |
-> Manager | manager for working with conduit functions |
-> s | initial state |
-> APIT s e m a | the actual |
-> m (Either (APIError e) a, Builder, s) | IO action that returns either an error or the result, as well as the final states |
Runs an API
by executing its transformer stack and dumping it all into IO
.
| Returns the actual result as well as the final states of the Builder
and custom state s
.
runRoute :: (Receivable a, ErrorReceivable e, MonadIO m) => Route -> APIT s e m a Source #
Runs a Route
. Infers the type to convert to from the JSON with the a
in API
,
and infers the error type from e
.
sendRoute :: (MonadIO m, Sendable t, ErrorReceivable e, Receivable r) => t -> Route -> APIT s e m r Source #
routeResponse :: (MonadIO m, ErrorReceivable e) => Route -> APIT s e m (Response ByteString) Source #
Runs a Route
, but only returns the response and does nothing towards
decoding the response.
routeRequest :: Builder -> Route -> Maybe Request Source #
Try to construct a Request
from a Route
(with the help of the Builder
). Returns Nothing
if
the URL is invalid or there is another error with the Route
.
Lifting
liftExcept :: Monad m => ExceptT (APIError e) (ReaderT Manager (StateT Builder (StateT s m))) a -> APIT s e m a Source #
Lifts an action that works on an API
to an action that works on an API
.
This function is provided solely for future-proofing in the case that more transformers
need to be stacked on top - it's implemented simply as id
for the moment.
liftEither :: Monad m => ExceptT (APIError e) (ReaderT Manager (StateT Builder (StateT s m))) a -> APIT s e m a Source #
Deprecated: Use liftExcept
Identical to liftExcept
, provided for (almost) compatibility.
liftManager :: Monad m => ReaderT Manager (StateT Builder (StateT s m)) a -> APIT s e m a Source #
Lifts an action that works on a Manager
to one that works on an API
.
liftBuilder :: Monad m => StateT Builder (StateT s m) a -> APIT s e m a Source #
Lifts an action that operates on a Builder
to one that works on an API
. Useful
mainly for gaining access to a Builder
from inside an API
.
liftState :: Monad m => StateT s m a -> APIT s e m a Source #
Lifts an action on an API
's state type s
to one that works on the API
. Good
for messing with the state from inside the API
.
Changing the Builder
within the API
name :: Monad m => Text -> APIT s e m () Source #
Modify the name
of the Builder
from inside an API. Using this is probably not the best idea,
it's nice if the Builder
's name is stable at least.
baseURL :: Monad m => Text -> APIT s e m () Source #
Modify the baseURL
of the Builder
from inside an API.
Can be useful for changing the API's endpoints for certain requests.