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ジェネリックであるだけでなく、一度だけチェックする方法はありますか?