1
如果我定义likeso反向功能:OCaml的类型系统的细微之处:多态,pointfree逆转和嵌套列表
let reverse =
let rec helper out = function
| [] -> out
| a :: l -> helper (a :: out) l
in helper []
然后reverse (List.map reverse xs)
不类型检查,错误
Error: This expression has type 'a list list
but an expression was expected of type 'a list
The type variable 'a occurs inside 'a list
但用明确的参数定义它
let reverse l =
let rec helper out = function
| [] -> out
| a :: l -> helper (a :: out) l
in helper [] l
使事情工作。
这是怎么回事?