2013-04-22 15 views
6

は私がOCamlの `[< >]はどういう意味ですか?

let rec parse_document = parser 
    | [< len = parse_int32; st; >] -> 
     parse_list [] (ES.take_int32 len st) 
    | [< >] -> malformed "parse_document" 

は私が内部[< >]何を知ることができたいくつかのソースコードを見たことがありますか?この種の兆候についてはGoogleにはあまりにも難しいです。

答えて

7

これはStreamデータ型の構文糖です。その操作は、Developping Applications with OCamlthis chapterに詳細に記載されている。

構文砂糖はコンパイラに組み込まれていないため、Camlp4プリプロセッサで前処理する必要があります。これを行うには、コンパイルコマンドラインに-pp camlp4oを追加する必要があります。

+0

内部で 'let encode_to_string = encode_to_buffer >> Buffer.contents' –

+0

これはユーザー定義の中置演算子です。let(>>)f g = ...'です。定義をチェックしなければなりませんが、逆関数のように見えます。 'let(>>)f g = fun x - > g(f x)'です。 – gasche

1

これはstreamsのリテラル構文です。ストリームはリストと似ていますが、一度に1つの要素しか利用できず、最初の要素を読み取って削除します。

これは、主にパーサーコードに使用されているようです。あなたの例のようにparserキーワードで宣言されたパーサーは、ストリームの要素を「消費」できる関数です。

2

これはストリームです。主にパーサーを作成するために使用されます。しかしストリームはOCamlから削除され、camlp4拡張として提供されています。

関連する問題