包含F#中类类型的代数数据类型

时间:2015-07-27 10:17:50

标签: f#

代数数据类型在F#中使用Sum(Discriminated Unions)和product(元组)类型表示。然后我可以像代数一样组合这些元素。

我还可以定义两个类类型的元组,如下所示:

type MINT (i:int) =
    member x.i = i

type MINTtuple = MINT * MINT

let  v :MINTtuple= MINT(42), MINT(43)

(fst v).i |> printfn "%d" |> ignore

但我似乎无法在查看一些documentation之后定义包含类似此类的DU或我能想到的任何其他语法:

type MINTDU = 
    |Positive of MINT
    |Negative of MINT
let w = Positive MINT(45)

我的问题:如果不可能,有什么根本原因?我对F#功能非常满意。我只想更好地理解功能类型和类类型之间的紧张关系。感谢。

1 个答案:

答案 0 :(得分:1)

你只需要一些括号。试试这个:

let createPositiveMint i =
    Positive (MINT i)

如果您不想要样本中的单独功能,则只需

let w = Positive (MINT 45)

根据@kaefer建议编辑。