自RWO以来,OCaml编译器是否彻底改变了?

Rek*_*aru 2 ocaml

来自Real World OCaml的示例第60页

List.map ~f:((+) 3) [4;5;6;];;
Error: The function applied to this argument has type 'a list -> 'b list
This argument cannot be applied with label ~f
Run Code Online (Sandbox Code Playgroud)

来自HTML托管版RWO的相同示例

List.map ~f:((+) 3) [4;5;6];;
- : int list = [7; 8; 9]
Error: The function applied to this argument has type 'a list -> 'b list
This argument cannot be applied with label ~f
Run Code Online (Sandbox Code Playgroud)

显然有些重大改变了吗?为什么这些例子不起作用?有更好的书可供学习吗?

这种语言很棒,我想尽我所能,但资源很少.

ant*_*ron 7

尝试使用模块ListLabels代替List.

这是关于标准库而不是编译器的问题,自RWO发布以来,这一点没有改变.RWO正在使用Jane Street Core,它具有与ListLabels标准库类似的功能.特别是,ListLabelsJane Street Core 在函数参数上List都有一个标签,而标准则没有.fmapList

标准ListLabels

标准清单

简街核心清单

在浏览器中搜索val map每个页面以查看功能签名.

您可以看到RWO正在使用# open Core.Std;;RWO代码顶部语句中的Jane Street Core .如果要使用常规标准模块List,请执行此操作

List.map ((+) 3) [4;5;6];;
Run Code Online (Sandbox Code Playgroud)

不确定他们的在线顶级用户是怎么回事.