Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.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,我是哈斯克尔的新手。我有一个工作表情: do x <- try parseA <|> parseB return x 及 及 去糖 这意味着 do x <- try parseA <|> parseB return x 这意味着您的正确版本和返回$try parseA parse B之间的唯一区别是(==return)之间的区别 也可以写成 try parseA <|> parse B 尝试解析A解析B 这意味着使用do符号的

我是哈斯克尔的新手。我有一个工作表情:

do x <- try parseA <|> parseB
   return x

去糖 这意味着

do x <- try parseA <|> parseB
   return x
这意味着您的正确版本和
返回$try parseA parse B
之间的唯一区别是
(==return)之间的区别
也可以写成

try parseA <|> parse B
尝试解析A解析B

这意味着使用do符号的原始表单也可以这样写。

谢谢,这是我需要了解的提示。我缺少的另一点是
(try parseA <|> parse B) >>= return
do return (try parseA <|> parseB)
parse.hs:76:11:
    Couldn't match expected type ‘Foo’
                with actual type ‘Text.Parsec.Prim.ParsecT
                                    [Char] () Data.Functor.Identity.Identity Foo’
do return $ try parseA <|> parseB
parse.hs:76:3:
    Couldn't match type ‘Text.Parsec.Prim.ParsecT
                           [Char] () Data.Functor.Identity.Identity Foo’
                  with ‘Foo’
    Expected type: Parser Foo
      Actual type: Text.Parsec.Prim.ParsecT
                     String
                     ()
                     Data.Functor.Identity.Identity
                     (Text.Parsec.Prim.ParsecT
                        [Char] () Data.Functor.Identity.Identity Foo)
do x <- try parseA <|> parseB
   return x
(try parseA <|> parse B) >>= return
return =<< (try parseA <|> parse B)
($)   :: (a -> b)   -> a   -> b
(=<<) :: (a -> m b) -> m a -> m b
k >>= return = k
(try parseA <|> parse B) >>= return
try parseA <|> parse B