OCaml中的`[< >]`是什么意思?

9
我看过一些源代码,其中有


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

我可以知道[< >]代表什么吗?这种符号很难在谷歌上搜索到。

4个回答

7
这是一种针对Stream数据类型的语法糖。如果要操作该数据类型,可以详细了解书籍Developping Applications with OCaml中的本章节
这种语法糖并不嵌入在编译器中,需要使用Camlp4预处理器进行预处理。为此,您需要在编译命令行中添加-pp camlp4o

let encode_to_string = encode_to_buffer >> Buffer.contents 中的 >> 是什么意思? - Jackson Tale
这是一个用户定义的中缀运算符:let (>>) f g = ...。您需要检查定义,但从名称来看,它似乎是反向函数组合:let (>>) f g = fun x -> g (f x) - gasche

2

这是一个流。它主要用于创建解析器。但是,流已从OCaml中删除,并现在作为camlp4扩展提供。


2

1
那就是streams的字面语法。流(stream)与列表类似,但只有一个元素可用,并通过读取它来删除第一个元素。
它似乎主要用于解析器代码。解析器 - 如您的示例中使用“parser”关键字声明的函数 - 可以“消耗”流的元素。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接