Handler and Monads] >

问题描述 投票:1回答:1

我正在努力撰写ServantServantHandler

Handler

为了回答一条路线,我必须使用Monad,这是class Monad p => Persist p where data Configuration p :: * runPersistance :: Configuration p -> p a -> IO a initPersistence :: p () newKind :: Kind -> p NewKindStatus -- ... kind :: P.Persist p => KindUid -> KindBody -> p (Handler ()) kind (KindUid uid) (KindBody actions) = undefined subject :: P.Persist p => KindUid -> SubjectUid -> EventData -> p (Handler EventUid) subject kind subject body = undefined event = post :<|> get where post :: P.Persist p => KindUid -> SubjectUid -> Action -> EventData -> p (Handler EventUid) post kind subject action body = undefined get :: P.Persist p => KindUid -> SubjectUid -> p (Handler [Event]) get kind subject = undefined server :: P.Persist p => p (Server HermesAPI) server = do k <- kind s <- subject e <- event return $ k :<|> s :<|> e app :: P.Persist p => p (Application) app = serve hermesAPI server 在做P.Persist

我没有找到一种方法来编译Monad

IO

由于server已经是/app/Main.hs:55:3: error: • Couldn't match type ‘KindUid -> SubjectUid -> p0 (Handler [Event])’ with ‘(KindUid -> SubjectUid -> Action -> EventData -> Handler EventUid) :<|> (KindUid -> SubjectUid -> Handler [Event])’ Expected type: p (Server HermesAPI) Actual type: p ((KindUid -> KindBody -> Handler ()) :<|> ((KindUid -> SubjectUid -> EventData -> Handler EventUid) :<|> (KindUid -> SubjectUid -> p0 (Handler [Event])))) • In a stmt of a 'do' block: k <- kind In the expression: do k <- kind s <- subject e <- event return $ k :<|> s :<|> e In an equation for ‘server’: server = do k <- kind s <- subject e <- event .... | 55 | k <- kind | ^^^^^^^^^ app/Main.hs:55:8: error: • Couldn't match type ‘KindBody’ with ‘KindUid’ Expected type: p (KindUid -> KindBody -> Handler ()) Actual type: KindUid -> KindBody -> KindBody -> Handler () • In a stmt of a 'do' block: k <- kind In the expression: do k <- kind s <- subject e <- event return $ k :<|> s :<|> e In an equation for ‘server’: server = do k <- kind s <- subject e <- event .... | 55 | k <- kind | ^^^^ ,所以我被困住了。如何编写Handler和我的newtype以便在Servant中运行它?

编辑:

我感谢[[Mark Seemann

迈出了一步,抬起Handler以利用MonadHandler
前往:

ServerT

谢谢。

我正在努力编写Servant的Handler和Monad:class Monad p =>坚持p其中数据配置p :: * runPersistance ::配置p-> pa-> IO a initPersistence ...

haskell monads monad-transformers servant
1个回答
1
投票
© www.soinside.com 2019 - 2024. All rights reserved.