Haskell 类型类中的参数变量

Haskell 类型类中的参数变量,haskell,Haskell,我在类型类中有一个参数变量,我想表示任何数字类型(Float、Integer、Double等) 如何在类型和实例中声明它?如果您指的是类本身的类型参数,则可以向类定义的上下文添加约束: class (Num a) => Foo a where -- stuff 另一方面,如果函数类型中的参数不是类参数,则可以按常规方式添加约束: class Foo a where foo :: (Num b) => a -> b -> b 如果您只想将其约束到某些特定

我在类型类中有一个参数变量,我想表示任何数字类型(
Float
Integer
Double
等)


如何在类型和实例中声明它?

如果您指的是类本身的类型参数,则可以向类定义的上下文添加约束:

class (Num a) => Foo a where
    -- stuff
另一方面,如果函数类型中的参数不是类参数,则可以按常规方式添加约束:

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

如果您只想将其约束到某些特定类型,这实际上是不可能的——类型类是“开放的”,即,您始终可以添加实例。最好是拥有自己的类(
foodumbers
或诸如此类),只编写所需的实例,然后使用该类而不是
Num
。但这通常是没有帮助的。

最后的警告是,对类(Num a)=>选项的警告吗?@peroni_santo:不,是试图将其限制为少数特定类型,而不是“任何具有
Num
实例的内容”。我在代码中给出的两个示例都很好。