直感的に分かってもらえるといいなと思います。パーザが必要なら、今あるものを使って簡単に構築可能です。Parser<'a,'u>このコンビネータは与えられた入力の状況で複数の取り得る入力形式をサポートできるようにします。パーザも使いましたが、これは最初に渡された引数の文字列定数をスキップして、パースに成功したら2番目に渡された引数の値を返します。コンビネータの振る舞いには2つの重要な特徴があります。右側のパーザを試行します。最長マッチルールを実装してはいません。失敗する場合のみ、右側のパーザを試行します。左側のパーザが失敗する前に空白を消費してしまうので、以下のテストは失敗してしまうということです。くくり出すことでこのパーザを簡単に修正することができます。ように引数としてパーザ列を受け入れます。出くわすことになるでしょう。プログラムでどう対処するかを説明します。一瞬このセクションの議論が技術的すぎるなと思ったら、ひとまず次のセクションに飛んで、「値制限」のコンパイラメッセージを実際に初めて目にした時に戻ってきましょう。使って作業する時、特にインタラクティブコンソールを使って作業している時に、遅かれ早かれこれかよく似たエラーメッセージを目にするでしょう。運がいいことに、この手のエラーは普通、簡単に回避することができます。値が未解決のジェネリック型を持っていると推論していることです。ユーザ状態の型を表しています。未解決の型パラメータを表すものと推論します。使うことでユーザ状態型に制約を掛けているため、2番目のスニペットではこの問題は起きません。プログラムで値制限に対処する方法を2つ提案しています。ある後の計算で使うことで、非パーザ値の型がジェネリック型に制限されるか確認するパーザ値の型に手動で制約をかけるために明白な型注釈を与える(大抵は、キーとなる箇所に型注釈を付ければパーザモジュール全体で十分となります)しばしば以下のような型省略をいくつか定義しておくと便利です。"test"というようにシンプルになります。非ジェネリック型にパーザ値の型を制約づけるのは、実際にジェネリック型が必要ない場合の解決策に過ぎません。説明されているような、別のテクニックを適用しなければなりません。値(パラメータをとるパーザ関数ではなく)は、大抵は固定のユーザ状態型をもつ特定のパーザを適用するコンテキストのもとに使われるだけです。そんな状況では、型に制約をかけるのは型制限エラーを避けるための全くもって妥当な方策なのです。パーザに取り組むのにいい準備ができました。単純で軽量な構文を持つテキストベースのデータ交換形式です。見つけることができます。ファイルを扱わなくてはならないだけです。ファイル用に特化したパーザを書くのが妥当であることがあります。このチュートリアルではより一般的なアプローチをたどってみます。AST、つまりファイルの内容を表現する中間データ構造にパースできるパーザを実装しましょう。アプリケーションはこのデータ構造を都合良くクエリして必要な情報を抽出できます。パーザのやり方によく似たアプローチです。処理する単純な関数の形で表現できることです。実装する自然な方法は判別共用体の助けを借りることです。null、角括弧内に値をコンマ区切りしたリスト、そして中括弧で囲ったキーと値のペアの列によるオブジェクトだと分かるでしょう。値を表現するために以下のような共用体を使います。処理をするのに特に便利だからです。型は再帰的であることに気をつけましょう。私たちのパーザはこの再帰的構造を反映しなければなりません。パーザを自力で(リファレンスの助けを借りつつ)実装してみるのはいい練習になるでしょう。文法は十分に簡単なので、そんなに時間がかからないはずです。詰まった時はいつでも下記に示す実装を参考にできます。真偽値の場合をカバーするところからパーザを実装し始めましょう。形式の上位集合をサポートしていることが分かるでしょう。16進浮動小数点形式までサポートしています。コンテキスト次第で、この振る舞いはパーザの特徴とも制限とも言えます。文法の上位集合をサポートしても良いと明確に述べています。ソースでこれがどのようにやっているかご覧になってみてください)を基にしてより簡単にそんな浮動小数点パーザを実装することができます。エスケープ済みの文字スニペットで区切られた普通の文字スニペットの列として文字列リテラルをパースします。文字を含まない任意の文字シーケンスです。ユニコードのエスケープのいずれかがバックスラッシュに続くものです。コードポイントを表す4桁の16進数です。リストとオブジェクトの文法ルールは再帰的です。値用のパーザを参照する方法が必要になります。すべての呼び出しを参照セルにあるパーザ(jvalueRef)に転送するパーザ(jvalue)を生成します。はじめに、参照セルはダミーのパーザを保持しますが、参照セルは可変であり、一度構築し終えたら、あとでダミーパーザを実際の値を持つパーザに置き換えることができます。リストとオブジェクトの両方とも括弧の間に「要素」があるコンマ区切りのリストとして構文的に表現されており、それらにおいて括弧、コンマ、そしてリスト要素の前後にある空白は許されます。f)この関数は4つの引数をとります。パーザ、そしてパースした要素のリストに適用する関数です。パーザについておしまいです。プロジェクトをご覧ください。フォルダにあるパーザ例を軽く眺めたりしてハックし始めましょう。どこかで詰まったりしたらユーザーズガイドをいつでも参照できます。参照しておくことが前提です。それぞれに配列や辞書型を使う方が妥当かもしれません。