type Alignment =
| Horizontal
| Vertical
let getMainAttr = function
| Horizontal -> fst
| Vertical -> snd
let check alignment =
let mainAttr = getMainAttr alignment
mainAttr (2,3) |> ignore
mainAttr (2.0, 3.0) // error
val getMainAttr : _arg1:Alignment -> ('a * 'a -> 'a)
mainAttr : (int * int -> int) // because of the value restriction
似乎使其通用的唯一方法是使其明确,例如let mainAttr x = getMainAttr alignment x
但是,因此它不再使用闭包,因此每次mainAttr
调用alignment
都必须进行检查。
有没有办法只检查alignment
一次并且是通用的?