generated at
Parsecの型
from Parsec



実装
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)
エラーも表すことができるようにEitherモナドも使う
失敗したときは、エラーの理由を示すString
成功したときは、型aの値と残りの文字列
Maybeを使わない理由は、
エラーメッセージを示したいから
パースに失敗した時に、別のパーサを使って再挑戦できるから
結局これが答えなのか?