2013-04-22 91 views
6

我已經看到有`[< >]`在OCaml中的含義是什麼?

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

我能知道什麼是[< >]裏面的一些源代碼?谷歌這種跡象太難了。

回答

7

這是一個Stream數據類型的語法糖。其操作在Developping Applications with OCaml的書this chapter中詳細描述。

語法糖不是內置在編譯器中,它需要由Camlp4預處理器進行預處理。爲此,您必須將-pp camlp4o添加到編譯命令行中。

+0

let'>>'inside'let encode_to_string = encode_to_buffer >> Buffer.contents' – 2013-04-22 15:52:32

+0

這是一個用戶定義的中綴運算符:'let(>>)f g = ...'。你必須檢查定義,但是從名字看它看起來像反函數組合:'let(>>)f g = fun x - > g(f x)'。 – gasche 2013-04-22 16:45:54

1

這是streams的字面語法。流就像列表一樣,除了一次只有一個元素可用並且通過讀取它來刪除第一個元素。

它似乎主要用於解析器代碼。解析器 - 在你的例子中用parser關鍵字聲明 - 是可以「消耗」流的元素的函數。

2

這是一個流。它主要用於創建解析器。但是流已經從OCaml中移除,現在作爲camlp4擴展提供。