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'是一個已經是類型的元組,對嗎? –