私は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に基づいていることは役に立ちません。