Parsecの型
実装
code:hs
instance Monad (ParsecT s u m) where
return = Applicative.pure
p >>= f = parserBind p f
(>>) = (Applicative.*>)
fail = Fail.fail
Parser a型
type Parser a = String -> a
めっちゃシンプルに考えるとこうなる
文字列をパースしてほしい型aを返す
型aっていうのは自分で定義したExpr型だったり、プリミティブなInt型だったり
自分がその文字列をパースした後に欲しい型
type Parser a = String -> (a, String)
文字列を引数にとって、
型aの値と、残りの文字列を返す
type Parser a = String -> Either String (a, String)
失敗したときは、エラーの理由を示すString
成功したときは、型aの値と残りの文字列
Maybeを使わない理由は、
エラーメッセージを示したいから
パースに失敗した時に、別のパーサを使って再挑戦できるから
結局これが答えなのか?