ターゲット ファイルのトークン emptyList の後に解析される内容に応じて、いくつかの非常に奇妙なエラーを引き起こしているコードの一部を次に示します。
data Express = Seq [Express]
| ID String
| Num Integer
| BoolConst Bool
| EmptyList String
emptyList :: Parser Express
emptyList = fmap EmptyList (string "[]")
問題は次のとおりです。
文字列 "[]" の後に、数字またはファイルの末尾以外の何か (空白を含む) が続くと、次のエラーが発生します。
(line 1, column 6):
unexpected end of input OR unexpected "d"
expecting digit
*** Exception: user error (parse error)
ただし、[] に続く数字で解析すると、エラーは報告されません。
e.g. "[] " error
"[] a" error
"[] 1" successful
また、Num Integer をデータ定義およびファイル内の他の場所から削除する必要があります。
number :: Parser Express
number = fmap Num integer
ファイルは "[]" の後に何もなくても正常に解析されますが、解析は "[]" が最初に出現するまでしか返されず、その後は何も返されません。
前もって感謝します。