Float
任意の数値型 ( 、Integer
など)を表現したい型クラスにパラメトリック変数がありますDouble
。
これを型とインスタンスで宣言するにはどうすればよいですか?
クラス自体の型パラメーターを意味する場合は、クラス定義のコンテキストに制約を追加できます。
class (Num a) => Foo a where
-- stuff
一方、クラス パラメーターではない関数の型のパラメーターである場合は、通常の方法で制約を追加できます。
class Foo a where
foo :: (Num b) => a -> b -> b
特定の型だけに制限したい場合、それは実際には不可能です。型クラスは「オープン」です。つまり、いつでもインスタンスを追加できます。あなたができる最善の方法は、独自のクラス(FooNumbers
またはそのようなもの)を持ち、必要なインスタンスのみを記述し、Num
. しかし、それは通常役に立ちません。