我有一個類型定義爲type abc = bool->int;;
這種類型的解釋從bool
到int
的簡單映射。我的問題是,我該如何使用這個type abc
?如何將Ocaml類型與函數映射一起使用?
例如像如果我有
type Color = Red|Green|Blue|Dark of Color|Light of Color;;
然後,我可以使用的東西就像type Color
Dark Red;;
。 但現在我似乎無法使用這個新的type abc
。
我有一個類型定義爲type abc = bool->int;;
這種類型的解釋從bool
到int
的簡單映射。我的問題是,我該如何使用這個type abc
?如何將Ocaml類型與函數映射一起使用?
例如像如果我有
type Color = Red|Green|Blue|Dark of Color|Light of Color;;
然後,我可以使用的東西就像type Color
Dark Red;;
。 但現在我似乎無法使用這個新的type abc
。
此類型abc
是bool -> int
的同義詞,不是新類型。由於它不是一種新類型,OCaml可能已經爲您推斷出這種類型。聲明這種類型的原因是爲了文檔。
因此,您的問題的最佳答案是,當您要記錄某種類型的文件時,您將使用abc
。
type abc = bool -> int
let apply (f: abc) (b: bool) : int =
f b
let myfun : abc = fun b -> if b then 3 else 4
在你的另一個例子中color
是一個新類型。如果你沒有聲明它,它就不存在。
(注意OCaml中該類型的名稱必須以小寫字母開頭。你不能有一個名爲類型Color
。)
更新
您需要的類型名稱來區分(如color
和int
)和構造函數(如Red
和Dark
和412)。你不能在類型名稱上模式匹配。您可以對值進行模式匹配(如Red
或Dark Red
或412)。您的類型abc
沒有構造函數。這是一個同義詞。
@melpomene指出,也沒有爲函數值定義相同的定義。所以你無法匹配函數值。
只是作爲一個例子使用該類型,但感謝指出這個錯誤:) –
我只是想使用該功能的一個簡單的情況下,但我無法找到任何接近它在網絡上,所以我結束了這裏。我剛開始學習Ocaml,所以發現它有點困難.. :) –
這是一個奇怪的問題。通常,你從一個問題開始並編寫代碼來解決這個問題。你不會編寫隨機代碼,然後去「好吧,我現在怎麼用?」。 – melpomene
我在我的函數中使用了一個類似的映射,但我無法在此處透露該代碼。而我在這裏卡住了,我不知道如何使用這種類型的映射定義。 :( –
這個「映射」的通常術語是「函數」,'bool - > int'是接受'bool'並返回一個'int'的函數的類型,你的'abc'是一個別名(別名) – melpomene