3

Float任意の数値型 ( 、Integerなど)を表現したい型クラスにパラメトリック変数がありますDouble

これを型とインスタンスで宣言するにはどうすればよいですか?

4

1 に答える 1

8

クラス自体の型パラメーターを意味する場合は、クラス定義のコンテキストに制約を追加できます。

class (Num a) => Foo a where
    -- stuff

一方、クラス パラメーターではない関数の型のパラメーターである場合は、通常の方法で制約を追加できます。

class Foo a where
    foo :: (Num b) => a -> b -> b

特定の型だけに制限したい場合、それは実際には不可能です。型クラスは「オープン」です。つまり、いつでもインスタンスを追加できます。あなたができる最善の方法は、独自のクラス(FooNumbersまたはそのようなもの)を持ち、必要なインスタンスのみを記述し、Num. しかし、それは通常役に立ちません。

于 2012-10-06T23:55:52.973 に答える