Haskell 带有“任意”的派生子句;约束别名";?

Haskell 带有“任意”的派生子句;约束别名";?,haskell,Haskell,例如,此声明使用派生: {-# LANGUAGE DeriveDataTypeable, ConstraintKinds #-} import Data.Data (Data) import Data.Typeable (Typeable) type Constraints a = (Show a, Eq a, Ord a, Data a, Typeable a) data A = A deriving (Constraints) 错误与: Illegal deriving item ‘Co

例如,此声明使用
派生

{-# LANGUAGE DeriveDataTypeable, ConstraintKinds #-}
import Data.Data (Data)
import Data.Typeable (Typeable)

type Constraints a = (Show a, Eq a, Ord a, Data a, Typeable a)
data A = A deriving (Constraints)
错误与:

Illegal deriving item ‘Constraints’
这是有道理的

我为大多数类型编写
派生(Show、Eq、Ord、Data、Typeable)
。导出标准的“约束别名”可能很好,即任何类型的
*->constraint
。当然,假设约束元组中的约束都是正确的算术,有一个空的“最小完全定义”,等等


对此有什么建议吗?这有多难?有其他选择吗?

没有这方面的建议。这不会太难,但我怀疑它不会有很大的牵引力。您不仅可以使用template haskell生成独立的派生声明(如注释所示),而且如果您真的愿意,还可以使用CPP宏扩展到所需的子句。

就提案而言,如果提案存在,我怀疑它可能在要做的事情列表中排名很低,特别是因为您通常可以派生的类集并没有那么大。如果你真的想避免每次都写出每个类,你可以使用模板Haskell来生成独立的派生声明。是的,我考虑过了,但是模板Haskell存在编译时间过长等问题。