0

ジェネリックであるが、指定された型のオーバーロードを持つ F# 型を定義できるようにしたいと考えています。特に、任意の数値型の X のシーケンスと Y のシーケンスのシーケンスを取るチャート プロット タイプを定義したいと思います。ただし、X が指定されていない場合は、整数の自動範囲を指定したいと思います。問題は、これが私の型のジェネリック性を壊してしまうことです。サンプルコードは以下のとおりです。オーバーロードを入れると、次のエラーが発生します。Warning 2 This construct causes code to be less generic than indicated by the type annotations. The type variable 'T has been constrained to be type 'int'.

type Plot(X : seq<'T>, Y : seq<seq<'U>>) =

    // Other plotting code
    do printfn "I am a plotter"

    // Constructor overload for when no Xs are provided
    new (Y : seq<seq<'U>>) = let Xs = List.init (Seq.length Y) id
                             Plot(Xs, Y)

さらに、'Uタイプに制限されていますobjobjを強制せずにこれを行う方法はありますdoubleか? 型システムに関する基本的な何かが欠けているように感じます...

4

1 に答える 1

0

これは静的メンバーで行うことができます。また、型定義に型引数がありません。

type Plot<'T, 'U>(X : seq<'T>, Y : seq<seq<'U>>) =

    // Other plotting code
    do printfn "I am a plotter"

    // Static member for when no Xs are provided
    static member Create<'V>(Y : seq<seq<'V>>) = 
        let Xs = List.init (Seq.length Y) id
        Plot(Xs, Y)
于 2013-06-25T21:04:27.593 に答える