代数数据类型在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#功能非常满意。我只想更好地理解功能类型和类类型之间的紧张关系。感谢。
答案 0 :(得分:1)
你只需要一些括号。试试这个:
let createPositiveMint i =
Positive (MINT i)
如果您不想要样本中的单独功能,则只需
let w = Positive (MINT 45)
根据@kaefer建议编辑。