私は(アプリケーションのように)左結合パーサ構築事業者<$>
、<*>
、<$
、<*
の束があります
integer :: Parser Integer
integer = read <$ many1 space <*> many1 digit
記述します。一番左のものは、結果値をコンポーネント値からアセンブルする純粋な関数でなければなりません。各演算子の右側にあるものはパーサであり、集合的に左から右の文法のコンポーネントを与えます。どちらの演算子を使うかは、次の2つの選択肢によって決まります。
だから、
the thing to the right is signal/noise
_________________________
the thing to the left is \
+-------------------
pure/| <$> <$
a parser | <*> <*
、パーサのセマンティクスを提供するために起こっている、純粋な関数としてread :: String -> Integer
を選択した、私たちは「信号」として、「ノイズ」と数字の束として、先頭のスペースを分類することができ、それゆえ
read <$ many1 space <*> many1 digit
(..) (.........) (.........)
pure noise parser |
(.................) |
parser signal parser
(.................................)
parser
あなたは
で
p1 <|> ... <|> pn
とエクスプレス不可能で複数の可能性を組み合わせることができます0
empty
パーサーでコンポーネントの名前を付ける必要はほとんどなく、結果のコードはセマンティクスが追加された文法に似ています。
なぜ 'const'ですか? – MathematicalOrchid
'many1 space'の値を無視しますが、' many1 space'の値に 'read'を適用します。 (すみません、私はちょうど入ってきました、遅いです、私は疲れています:私は速く、用語で緩んでいます) '' '' '' '' '' '' '' '' 'const read sd' =' read d'である場合には、const read <$> many1 space <*> many1 digitの値は無視されます。 – dave4420