[英]Chain two parsers in Haskell (Parsec)
Parsec 提供了一个运算符来在两个解析器之间进行选择:
(<|>)
:: Text.Parsec.Prim.ParsecT s u m a
-> Text.Parsec.Prim.ParsecT s u m a
-> Text.Parsec.Prim.ParsecT s u m a
是否有类似的功能来链接两个解析器? 我没有使用 Hoogle 找到具有相同签名的一个。
举个例子,假设我想解析任何单词,可选地后跟一个数字。 我的第一个想法是使用>>
但它似乎不起作用。
parser = many1 letter >> optional (fmap pure digit)
我使用fmap pure
将数字转换为实际字符串,从而匹配many1 letter
的解析类型。 不知道有没有用
尝试这个:
parser = (++) <$> many1 letter <*> option "" (fmap pure digit)
这相当于:
parser = pure (++) <*> many1 letter <*> option "" (fmap pure digit)
如果解析器digit
失败,则option [] (fmap pure digit)
返回空字符串,否则返回来自一个数字字符的字符串。
您还可以使用 do-notation 来获得更具可读性的代码:
parser = do
s1 <- many1 letter
s2 <- option "" (fmap pure digit)
return (s1 ++ s2)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.