我正在努力撰写Servant
的Servant
和Handler
:
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
以利用Monad
:Handler
前往:
ServerT
谢谢。
我正在努力编写Servant的Handler和Monad:class Monad p =>坚持p其中数据配置p :: * runPersistance ::配置p-> pa-> IO a initPersistence ...