2
type 'a lazy_node =
| Empty
| Node of 'a * 'a lazy_list
and 'a lazy_list = 'a lazy_node lazy_t
let con x zl = lazy (Node (x,zl))
所以这里应该定义两种类型:'a lazy_node
和'a lazy_list
。OCaml在这种情况下如何推断类型?
我认为con
的类型将是'a -> 'a lazy_list -> 'a lazy_list
然而,实际上,当我在utop
试了一下,给了con
这样的类型:
val con : 'a -> 'a lazy_list -> 'a lazy_node lazy_t = <fun>
为什么返回类型不是'a lazy_list
? OCaml在这种情况下如何推断?
所以你的意思,甚至'类型“一MYTYPE =”清单* int'或'型MYTYPE = INT * float'不真正的类型,只是别名?您能否在您的回答中添加更多什么是实际类型和别名? –
当你编写'type newtype = othertype'时,它会创建一个别名。 – Thomash
好吧,明白了,谢谢。所以'输入'一个mytype ='一个列表* int'是一个别名,因为''列表* int'是一个已经是类型的元组,对吗? –