相关疑难解决方法(0)

为什么OCaml有时需要进行eta扩展?

如果我有以下OCaml功能:

let myFun = CCVector.map ((+) 1);;
Run Code Online (Sandbox Code Playgroud)

它在Utop中运行良好,Merlin不会将其标记为编译错误.但是,当我尝试编译它时,我收到以下错误:

错误:此表达式的类型, (int,'_ a)CCVector.t - >(int,'_ b)CCVector.t,包含无法泛化的类型变量

如果我eta-expand它然后它编译好:

let myFun foo = CCVector.map ((+) 1) foo;;
Run Code Online (Sandbox Code Playgroud)

所以我想知道为什么它不能以eta-reduced形式编译,以及为什么eta-reduced表单似乎在顶层(Utop)中工作但在编译时不起作用?

哦,CCVector的文档就在这里.'_a部分可以是`RO或`RW,具体取决于它是只读还是可变.

ocaml haskell functional-programming

20
推荐指数
1
解决办法
1085
查看次数

标签 统计

functional-programming ×1

haskell ×1

ocaml ×1