realworld-hs-0.1.0.0: Scotty impl of https://github.com/gothinkster/realworld
Safe HaskellSafe-Inferred
LanguageGHC2021

Conduit.App.Monad

Synopsis

Documentation

newtype AppM a Source #

The app monad. woo.

Constructors

AppM 

Fields

Instances

Instances details
MonadIO AppM Source # 
Instance details

Defined in Conduit.App.Monad

Methods

liftIO :: IO a -> AppM a #

Applicative AppM Source # 
Instance details

Defined in Conduit.App.Monad

Methods

pure :: a -> AppM a #

(<*>) :: AppM (a -> b) -> AppM a -> AppM b #

liftA2 :: (a -> b -> c) -> AppM a -> AppM b -> AppM c #

(*>) :: AppM a -> AppM b -> AppM b #

(<*) :: AppM a -> AppM b -> AppM a #

Functor AppM Source # 
Instance details

Defined in Conduit.App.Monad

Methods

fmap :: (a -> b) -> AppM a -> AppM b #

(<$) :: a -> AppM b -> AppM a #

Monad AppM Source # 
Instance details

Defined in Conduit.App.Monad

Methods

(>>=) :: AppM a -> (a -> AppM b) -> AppM b #

(>>) :: AppM a -> AppM b -> AppM b #

return :: a -> AppM a #

MonadApp AppM Source # 
Instance details

Defined in Conduit.App.Monad

Methods

liftApp :: AppM a -> AppM a Source #

MonadUnliftIO AppM Source # 
Instance details

Defined in Conduit.App.Monad

Methods

withRunInIO :: ((forall a. AppM a -> IO a) -> IO b) -> AppM b #

MonadReader Env AppM Source # 
Instance details

Defined in Conduit.App.Monad

Methods

ask :: AppM Env #

local :: (Env -> Env) -> AppM a -> AppM a #

reader :: (Env -> a) -> AppM a #

MonadApp (ActionT AppM) Source # 
Instance details

Defined in Conduit.App.Monad

Methods

liftApp :: AppM a -> ActionT AppM a Source #

class Monad m => MonadApp m where Source #

Lifts computations to the app monad level. (MonadApp m) shouldn't be used directly as a constraint; Rather, just use liftApp and see Has.

Methods

liftApp :: AppM a -> m a Source #

Instances

Instances details
MonadApp AppM Source # 
Instance details

Defined in Conduit.App.Monad

Methods

liftApp :: AppM a -> AppM a Source #

MonadApp (ActionT AppM) Source # 
Instance details

Defined in Conduit.App.Monad

Methods

liftApp :: AppM a -> ActionT AppM a Source #

runService :: FeatureError e => AppM (Either e a) -> ActionT AppM a Source #

Runs a service in the App monad and converts its potentially failed result to the appropriate error if neccesary.

data MyErr = Aw Text
data MyResult = Yay Text deriving (Generic, ToJSON)

instance FeatureError MyErr where
  handleFeatureError (ResultErr msg) = do 
    status status500
    text msg

endpoint = get "/" $ do
  (result :: MyResult) <- runService (someAppService :: AppM (Either MyErr MyResult))
  json result