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