2

私はParsec3.1.2とGHC7.4.1を使用して、やや毛むくじゃらのデータファイル形式のパーサーを作成しようとしています。かなり些細なケースだと思いますが、タイプエラーが発生します。RealWorldHaskellの適用可能なファンクターの例に従おうとしています。

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の例に基づいて、型エラーが発生しますNoMonomorphismRestriction。言語プラグマを追加しようとしましたが、これは役に立ちませんでした。

Haskellの経験は少しありますが、Parsecの学習曲線はかなり急であることがわかりました。RealWorldHaskellの本の例がParsec2に基づいていることは役に立ちません。

4

1 に答える 1

3

あなたはこのコードを書いています:

many char ' '

manyこれにより、関数にcharとの 2 つの引数が渡され' 'ます。あなたがしたいことは、次のように行われる関数に結果を渡すことchar ' 'ですmany:

many (char ' ')
于 2012-05-23T17:38:41.327 に答える