我以为我手头有 Yesod 类型,可以满足我的简单需求。哈!这里有两个现在可以编译的函数,但目前并没有完全按照我的意愿进行,我不知道如何进行。
addNote' selectedProduct = do
_ <- runDB $ insert <=< liftIOHandler $ addNote selectedProduct
return ()
-- addNote :: SelectedProduct -> IO (NotesGeneric SqlPersist)
addNote (MKsp tid firmware version _ requester (Textarea note)) = do
-- currentTime <- getCurrentTime
return $ Notes tid requester firmware version note undefined
我有addNote
注释掉的类型签名是有原因的,如果我取消注释它,或者调用 getCurrentTime,我会收到我将在下面显示的错误。
我不知道是什么类型的addNote'
。GHC 表示如下:
Warning: Top-level binding with no type signature:
addNote' :: forall master (monad :: * -> *) sub sub1 master1.
(YesodPersistBackend master
~
Control.Monad.Trans.Reader.ReaderT (HandlerData sub1 master1),
YesodPersist master,
PersistBackend
(Control.Monad.Trans.Reader.ReaderT (HandlerData sub1 master1))
(GGHandler sub master IO),
Control.Monad.IO.Class.MonadIO monad) =>
SelectedProduct
-> Control.Monad.Trans.Reader.ReaderT
(HandlerData sub master) monad ()
此外,GHC 说的类型addNote
是这样的:
addNote :: forall (m :: * -> *).
Monad m =>
SelectedProduct -> m (NotesGeneric SqlPersist)
如果我取消注释该getUTCTime
行或addNote
.
Couldn't match expected type `Control.Monad.Trans.Reader.ReaderT
(HandlerData sub0 master0) IO b0'
with actual type `IO (NotesGeneric SqlPersist)'
Expected type: GGHandler sub0 master0 IO b0
Actual type: IO (NotesGeneric SqlPersist)
In the return type of a call of `addNote'
In the second argument of `($)', namely `addNote selectedProduct'
如何让类型匹配?