この単純な関数:
let sum a b = a + b
int 型でのみ機能します
float と long でも機能するようにするにはどうすればよいですか?
インラインを使用:
let inline sum a b = a + b
アップデート:
独自の多相数値関数を作成することに関心がある場合は、インラインモジュールとLanguagePrimitivesモジュールの両方を使用する必要があります。
これはスレッドConverting Haskell Polymorphic Cosine function to F#からの多形コサイン関数です:
let inline cosine n (x: ^a) =
let one: ^a = LanguagePrimitives.GenericOne
Seq.initInfinite(fun i -> LanguagePrimitives.DivideByInt (- x*x) ((2*i+1)*(2*i+2)))
|> Seq.scan (*) one
|> Seq.take n
|> Seq.sum
あなたが与えるサンプル関数は、型推論のためにint型に対してのみ機能します。型推論メカニズムは、加算を確認するため、自動的にintを推論します。floatとlongで同じ関数を作成する場合は、Padが言ったようにインラインで実行するか、次のようにします。
let sumFloat (a:float) b = a + b
let sumLong (a:int64) b = a + b
ただし、インラインは、探している一般的な「加算をサポートする任意のタイプ」の動作を取得するための適切なメカニズムです。