Да, но вы должны аннотировать следующим образом:
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
Попробуйте заменить Thing<'a when 'a:comparison>
на Thing<'a when 'a:equality>
, чтобы убедиться, что метод InOrder()
не работает, пока Equal()
все еще работает. Замените Thing<'a when 'a:comparison>
на Thing<'a>
, и оба метода не будут работать.