我知道有fst
and snd
,但是为什么没有使用类型类的访问器函数的“通用”定义?我会建议像
class Get1 p a | p -> a where
get1 :: p -> a
instance Get1 (a,b) a where
get1 (x,_) = x
instance Get1 (a,b,c) a where
get1 (x,_,_) = x
class Get2 p a | p -> a where
get2 :: p -> a
instance Get2 (a,b) b where
get2 (_,x) = x
instance Get2 (a,b,c) b where
get2 (_,x,_) = x
当然,你需要一些语言扩展,但这不是更方便吗?特别是您可以为自己的类型添加实例。