2012-05-23 51 views
2

我正在使用Parsec 3.1.2与GHC 7.4.1来尝试编写一个有点多毛的数据文件格式的解析器。我有我认为是一个很平凡的情况,但我得到一个类型错误。我试图遵循Real World Haskell的应用函数示例。Parsec输入错误

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语言编译,但是这并没有帮助。

我承认,尽管我有一点Haskell的经验,但我发现Parsec的学习曲线相当陡峭。它没有帮助的真实世界哈斯克尔书上的例子是基于秒差距2.

回答

3

您在编写这些代码:

many char ' ' 

这将通过2个参数的many功能:char' '。你想要做什么是的char ' '结果传递给many功能,它是这样完成的:

many (char ' ') 
+0

D'哦,我应该抓住这一点。事实上,这确实解决了问题,并将它推向别处。我会为此提出一个单独的问题。 –