F#是否支持模板或泛型?

Yin*_*Zhu 3 f#

我想实现堆数据结构,并希望将代码应用于任何支持比较的类型,即<=> <=> = operations.

如何在F#中执行此操作,因为它是静态类型的.

cfe*_*ern 9

确实如此,但您必须注释如下:

type Thing<'a when 'a:comparison> =
    | Pair of ('a*'a)
    with 
      member m.InOrder() = 
        match m with
        | Pair (a,b) when a<=b -> true
        | _ -> false
      member m.Equal() =
        match m with 
        | Pair (a,b) when a=b -> true
        | _ -> false

Pair(1,2).InOrder() //true
Pair(3,2).InOrder() //false
Pair(42,42).Equal() //true
Run Code Online (Sandbox Code Playgroud)

尝试更换Thing<'a when 'a:comparison>Thing<'a when 'a:equality>观看InOrder()方法失败,而Equal()仍然有效.替换Thing<'a when 'a:comparison>Thing<'a>,两种方法都不起作用.