例如,此声明包含deriving
:
{-# 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’
鉴于http://downloads.haskell.org/~ghc/7.8.3/docs/html/users_guide/deriving.html
,这是有道理的我为大部分类型写deriving (Show, Eq, Ord, Data, Typeable)
。导出标准"约束别名"可能是好的,即任何类型的* -> Constraint
。当然,鉴于约束元组中的约束都是正确的arity,有一个空的"最小的完整定义"等等。
有什么建议吗?这有多难?还有其他选择吗?
答案 0 :(得分:1)
没有提议。这不会太难,但我怀疑它不会有太大的牵引力。您不仅可以使用模板haskell生成独立的派生声明,如评论所示,但如果您真的需要,可以使用CPP宏扩展到您想要的子句。