F# 中的运算符重载/支持有区别的联合

Operator overloading / support discriminated unions in F#

我有一个可区分的联合(标记值),它应该代表多项式的次数

type Degree =
    |MinusInf
    |Fin of int

所以我有一个函数可以给出多项式的次数

>deg [1;2;3;4];;
val it : Degree = Fin 3

现在,我的问题是,我怎样才能创建一个允许我添加度数的函数,以便:

 Fin 2 + Fin 3 = Fin 5

一切顺利

MSDN 上有一篇相当详细的文章。简而言之,您想在 Degree 类型上定义这样的函数:

type Degree =
    |MinusInf
    |Fin of int
    static member (+) (a: Degree, b: Degree) : Degree =
        match a, b with
        | Fin x, Fin y -> Fin (x+y)
        | _, _ -> MinusInf

let x = Fin 2 + Fin 3