2
我以爲我有我的簡單需求手中的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'
我該如何去獲得匹配的類型?
昨天晚上這個解決方案出乎我的意料,我希望這是簡單的。 –