let rec parse_document = parser
| [< len = parse_int32; st; >] ->
parse_list [] (ES.take_int32 len st)
| [< >] -> malformed "parse_document"
は私が内部[< >]
何を知ることができたいくつかのソースコードを見たことがありますか?この種の兆候についてはGoogleにはあまりにも難しいです。
let rec parse_document = parser
| [< len = parse_int32; st; >] ->
parse_list [] (ES.take_int32 len st)
| [< >] -> malformed "parse_document"
は私が内部[< >]
何を知ることができたいくつかのソースコードを見たことがありますか?この種の兆候についてはGoogleにはあまりにも難しいです。
これはStreamデータ型の構文糖です。その操作は、Developping Applications with OCamlのthis chapterに詳細に記載されている。
構文砂糖はコンパイラに組み込まれていないため、Camlp4プリプロセッサで前処理する必要があります。これを行うには、コンパイルコマンドラインに-pp camlp4o
を追加する必要があります。
これはstreamsのリテラル構文です。ストリームはリストと似ていますが、一度に1つの要素しか利用できず、最初の要素を読み取って削除します。
これは、主にパーサーコードに使用されているようです。あなたの例のようにparser
キーワードで宣言されたパーサーは、ストリームの要素を「消費」できる関数です。
これはストリームです。主にパーサーを作成するために使用されます。しかしストリームはOCamlから削除され、camlp4拡張として提供されています。
これはStream parsing syntax extensionの一部であり、空のストリームを意味します。
内部で 'let encode_to_string = encode_to_buffer >> Buffer.contents' –
これはユーザー定義の中置演算子です。let(>>)f g = ...'です。定義をチェックしなければなりませんが、逆関数のように見えます。 'let(>>)f g = fun x - > g(f x)'です。 – gasche