【发布时间】:2012-01-16 08:52:36
【问题描述】:
我必须定义一个类型类Truthy,其中包含一个方法true,将类型类的实例转换为Bool 值。
我的类型类声明:
class Truthy a where
true :: a -> Bool
接下来,我必须为各种类型定义此类的实例,包括列表和数字类型。我已经为列表和Ints 完成了它,但是有没有办法同时为所有数字类型完成它?
基于我的 Int 声明:
instance Truthy Int where
true = (/=) 0
我已经尝试添加类型类约束,但它不起作用:
instance (Num a) => (Truthy a) where
true = (/=) 0::a
如果有一种类似于我的想法的方法,还是应该为每种数字类型分别定义它?
【问题讨论】:
-
"或者我应该为每个数字类型分别定义它?" - 总之是。类型类的设计目标是允许在每个类型的基础上进行重载。使用扩展可以定义“超出范围”的实例,但它们通常是设计缺陷。
标签: haskell