【问题标题】:Type errors with ParsecParsec 的类型错误
【发布时间】:2012-05-23 17:33:35
【问题描述】:

我正在使用 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 经验。 Real World Haskell 书中的示例基于 Parsec 2 并没有帮助。

【问题讨论】:

    标签: haskell parsec


    【解决方案1】:

    你正在编写这段代码:

    many char ' '
    

    这会将 2 个参数传递给 many 函数:char' '。您要做的是将char ' ' 的结果传递给many 函数,这样做是这样的:

    many (char ' ')
    

    【讨论】:

    • D'oh,我应该明白这一点的。实际上,这确实解决了问题,并将其推到了其他地方。我会问一个单独的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    相关资源
    最近更新 更多