使用任意"约束别名"?派生子句

时间:2015-01-20 04:37:45

标签: haskell

例如,此声明包含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,有一个空的"最小的完整定义"等等。

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

1 个答案:

答案 0 :(得分:1)

没有提议。这不会太难,但我怀疑它不会有太大的牵引力。您不仅可以使用模板haskell生成独立的派生声明,如评论所示,但如果您真的需要,可以使用CPP宏扩展到您想要的子句。