如果您指的是类本身的类型参数,则可以向类定义的上下文添加约束:
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
.但这通常没有用.