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
实例的内容”。我在代码中给出的两个示例都很好。