类型类中的参数变量

per*_*nto 3 haskell

我在我想表示任何数量的类型(的类型的类的参数变量Float,Integer,Double等等).

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

C. *_*ann 8

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

class (Num a) => Foo a where
    -- stuff
Run Code Online (Sandbox Code Playgroud)

另一方面,如果它是函数类型中不是类参数的参数,那么您可以通常的方式添加约束:

class Foo a where
    foo :: (Num b) => a -> b -> b
Run Code Online (Sandbox Code Playgroud)

如果您想将其限制为仅某些特定类型,那是不可能的 - 类型类是"开放的",即您始终可以添加实例.你能做的最好的就是拥有你自己的类(FooNumbers或类似的),只写你想要的实例,然后要求而不是Num.但这通常没有用.