Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 我能';不要让它编译并且类型匹配_Haskell - Fatal编程技术网

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答案是:)