【问题标题】:Algebraic data types containing class types in F#F# 中包含类类型的代数数据类型
【发布时间】:2015-07-27 10:17:50
【问题描述】:

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

我也可以像这样定义两个类类型的元组:

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

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

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

我的问题:如果不可能,根本原因是什么?我对 F# 的特性非常满意。我只想更好地理解函数类型和类类型之间的张力。谢谢。

【问题讨论】:

    标签: f#


    【解决方案1】:

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

    let createPositiveMint i =
        Positive (MINT i)
    

    如果您不想要示例中的单独函数,那就是

    let w = Positive (MINT 45)
    

    根据@kaefer 的建议进行了编辑。

    【讨论】:

    • 您并不总是需要那么多括号。没有它们,构造表达式是可能的,当它们嵌套时,外部对是必需的:let w = Positive(MINT 45)
    • @Kevin:谢谢。所有这些让我恶心。已恢复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 2016-09-20
    • 1970-01-01
    相关资源
    最近更新 更多