我发现了一些在处理ocaml
项目时并不了解的东西。ocaml中的模块化编程
假设我使用OCaml标准库的Array
和List
模块。它们都执行功能length
但具有不同的类型。 在List
模块,这是它的类型:
length: a' list -> int
而且Array
模块中,它具有类型:
length: a' array -> int
但后来我想,你在同一个模块我是在用这两个模块实施,通过open
关键字:
open List
open Array
当我试图用在了length
功能列表中,编译期间出现类型错误。
由于OCaml是一个强大的静态类型语言,我想知道为什么编译器不知道我想要列表模块的长度函数,因为我声明我正在使用两者。
“我想知道为什么编译器不知道我想要列表模块的长度函数,因为我声明我同时使用了”是的,但是什么类型的'fun s - > length s'在这种情况呢? – 2012-07-31 09:33:28
基于jrouquie的答案,它会是'a'array - > int' – 2012-07-31 09:52:56
准确地说,但是在假设的OCaml编译器试图猜测的情况下,在OCaml类型系统中不会有单个最通用的类型为功能。您可能会对Haskell的解决方案感兴趣,请输入类:http://www.haskell.org/tutorial/classes.html – 2012-07-31 11:32:54