我在类型类中有一个参数变量,我想表示任何数字类型(Float
,Integer
,Double
等。
我如何在类型和实例中声明这个?
答案 0 :(得分:8)
如果您指的是类本身的类型参数,则可以在类定义的上下文中添加约束:
class (Num a) => Foo a where
-- stuff
另一方面,如果它是函数类型中不是类参数的参数,那么您可以通常的方式添加约束:
class Foo a where
foo :: (Num b) => a -> b -> b
如果您想将其限制为仅某些特定类型,那是不可能的 - 类型类是“开放的”,即您始终可以添加实例。您可以做的最好的是拥有自己的类(FooNumbers
或类似),只写下您想要的实例,然后要求而不是Num
。但这通常没有帮助。