Haskell 我能';不要让它编译并且类型匹配
在我的仆人应用程序中,我有:Haskell 我能';不要让它编译并且类型匹配,haskell,Haskell,在我的仆人应用程序中,我有: getItems :: Maybe String -> ExceptT ServantErr IO [MyData] getItems myHdr = case myHdr of Nothing -> throwE err403 Just myHdrVal -> do case myHdrVal of "aaabbbcc" -> liftIO $ do print "goo
getItems :: Maybe String -> ExceptT ServantErr IO [MyData]
getItems myHdr =
case myHdr of
Nothing -> throwE err403
Just myHdrVal -> do
case myHdrVal of
"aaabbbcc" -> liftIO $ do
print "gooood!"
query_ cn "select * from table1"
_ -> throwE err403 -- I want to add "print"
这个很好用。但是,由于类型不匹配,无法编译以下内容:
_ -> print "not gooood" >> throwE err403
-- or
_ -> liftIO $ do
print "not gooood"
throwE err403
-- or
_ -> liftIO =<< (print "not gooood" >> throwE err403) -- incorrect, though
\->打印“非gooood”>>通过错误403
--或
_->liftIO$do
打印“不好”
throwE错误403
--或
_->liftIO=>throwE err403)--但不正确
如何修复它?根据我的评论和haoformayor的鼓励,这应该可以解决问题:
_ -> do
liftIO $ print "not gooood"
throwE err403
请注意,您只需提起打印
,因为这是IO
monad中的“works”,而不是throwE
,因为它显然已经返回了正确的类型
当然
_ -> liftIO (print "not gooood") >> throwE err403
如果你愿意,我也应该工作
免责声明
根据我的评论和haoformayor的鼓励,我没有很好地测试这个,这应该可以做到:
_ -> do
liftIO $ print "not gooood"
throwE err403
请注意,您只需提起打印
,因为这是IO
monad中的“works”,而不是throwE
,因为它显然已经返回了正确的类型
当然
_ -> liftIO (print "not gooood") >> throwE err403
如果你愿意,我也应该工作
免责声明
我没有测试这个好吧,我现在无法尝试,但是做
->do
然后liftIO(打印“不好”)
然后通过我们的err403
(都在新行上,最后两行缩进到同一级别-我希望你能理解我的意思)-请参阅:throwE
显然是一个返回正确类型的函数-您不必提升it@Carsten答案是这样的:)好吧,我现在不能尝试,但是先做->do
然后liftIO(打印“不好”)
然后通过我们的错误403(所有新行的最后两行缩进到同一级别-我希望您能理解我的意思)-请参见:throwE
显然是一个返回正确类型的函数-您不必取消it@Carsten答案是:)