generated at
ParsecT s u m aモナド

ParsecT s u m a の各パラメータの意味を理解するときに、
一文字ずつではなく、ParsecTその型定義を見てから、塊として理解したほうがいい




hs
newtype ParsecT s u m a = ParsecT {unParser :: forall b . State s u -> (a -> State s u -> ParseError -> m b) -- consumed ok -> (ParseError -> m b) -- consumed err -> (a -> State s u -> ParseError -> m b) -- empty ok -> (ParseError -> m b) -- empty err -> m b }
簡略化すると
ParsecT { unParser = \s cok cerr eok eerr -> m b }
s
後述する State s u
4つの関数
これらは全て返り値は m b
cok
マッチが成功して文字列の消費が起きる場合
cerr
マッチが失敗するが文字列の消費が起きる場合
eok
マッチが成功するが文字列の消費が起きない
eerr
マッチが失敗して文字列の消費も起こらない


State s u
parserの状態となる型
「パーサ状態」と呼ぶ
3つの状態を保持する
parserInput :: s
パーサへの入力文字列
statePos :: !SourcePos
パーサ状態の位置
stateUser :: !u
ユーザが使用するユーザ状態
具体的には何 #??
参考
わかりやすい




m
内部のモナド
殆どの場合は Identity で事足りる
なので Parsec s u a が用意されている
type Parsec e s a = ParsecT e s Identity a
a
パース結果であるモナディック値



参考