2017-01-22 82 views
0

我有一個類型定義爲type abc = bool->int;;這種類型的解釋從boolint的簡單映射。我的問題是,我該如何使用這個type abc如何將Ocaml類型與函數映射一起使用?

例如像如果我有

type Color = Red|Green|Blue|Dark of Color|Light of Color;;

然後,我可以使用的東西就像type ColorDark Red;;。 但現在我似乎無法使用這個新的type abc

+0

這是一個奇怪的問題。通常,你從一個問題開始並編寫代碼來解決這個問題。你不會編寫隨機代碼,然後去「好吧,我現在怎麼用?」。 – melpomene

+0

我在我的函數中使用了一個類似的映射,但我無法在此處透露該代碼。而我在這裏卡住了,我不知道如何使用這種類型的映射定義。 :( –

+0

這個「映射」的通常術語是「函數」,'bool - > int'是接受'bool'並返回一個'int'的函數的類型,你的'abc'是一個別名(別名) – melpomene

回答

1

此類型abcbool -> 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。)

更新

您需要的類型名稱來區分(如colorint)和構造函數(如RedDark和412)。你不能在類型名稱上模式匹配。您可以對值進行模式匹配(如RedDark Red或412)。您的類型abc沒有構造函數。這是一個同義詞。

@melpomene指出,也沒有爲函數值定義相同的定義。所以你無法匹配函數值。

+0

只是作爲一個例子使用該類型,但感謝指出這個錯誤:) –

+0

我只是想使用該功能的一個簡單的情況下,但我無法找到任何接近它在網絡上,所以我結束了這裏。我剛開始學習Ocaml,所以發現它有點困難.. :) –

相關問題