3

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

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

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 回答