我正在使用Parsec 3.1.2和GHC 7.4.1来尝试为一种有点复杂的数据文件格式编写解析器。我有一个我认为是相当琐碎的例子,但是我得到了一个类型错误。我正在尝试遵循来自Real World Haskell的应用函数器示例。
import Text.ParserCombinators.Parsec hiding (many, optional, (<|>))
import Text.ParserCombinators.Parsec.Char
import Text.Parsec.String
import Control.Applicative
p_int = many char ' ' *> many1 digit <* many char ' '现在,最初我得到了以下类型错误:
Couldn't match expected type `[Char]'
with actual type `Text.Parsec.Prim.ParsecT s0 u0 m0 [a0]'
In the return type of a call of `many1'
In the second argument of `(*>)', namely `many1 digit'
In the first argument of `(<*)', namely
`many char ' ' *> many1 digit'基于Trivial parsec example produces a type error,我尝试添加NoMonomorphismRestriction语言杂注,但这没有帮助。
我承认,我发现Parsec的学习曲线相当陡峭,尽管我有一点Haskell经验。现实世界的Haskell书中的例子都是基于Parsec 2的,这并没有什么帮助。
发布于 2012-05-24 01:38:41
您正在编写以下代码:
many char ' '这将向many函数传递两个参数:char和' '。您想要做的是将char ' '的结果传递给many函数,这是这样完成的:
many (char ' ')https://stackoverflow.com/questions/10725031
复制相似问题