【发布时间】:2011-07-19 12:26:52
【问题描述】:
考虑以下类型类:
class Listable a where
asList :: a t -> [t]
用一个参数为类型创建实例很容易:
instance Listable [] where
asList = id
instance Listable Maybe where
asList (Just x) = [x]
asList Nothing = []
现在我将如何为具有两个相同类型参数的对创建一个实例?当然我可以做一些包装:
data V2 a = V2 a a
v2 (p,q) = V2 p q
instance Listable V2 where
asList (V2 p q) = [p,q]
现在我可以写asList $ v2 (47, 11) 之类的东西,但这样就达不到目的了。
有没有办法将 pair 的类型限制为两个类型参数相等的情况,并为此编写一个 Listable 实例?如果不是,通常的解决方法是什么?
【问题讨论】: