例如,此声明包含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)
Run Code Online (Sandbox Code Playgroud)
错误:
Illegal deriving item ‘Constraints’
Run Code Online (Sandbox Code Playgroud)
这对http://downloads.haskell.org/~ghc/7.8.3/docs/html/users_guide/deriving.html有意义
我deriving (Show, Eq, Ord, Data, Typeable)为大部分类型写作.导出标准的"约束别名",即任何类型的类型可能会很好* -> Constraint.当然,给定约束元组中的约束都是正确的arity,具有空的"最小完整定义"等.
对此有什么建议吗?这有多难?还有替代品吗?
没有这方面的建议。这不会太难,但我怀疑它不会有太大的吸引力。您不仅可以使用模板 haskell 生成独立的派生声明(如注释所示),而且如果您确实愿意,还可以使用 CPP 宏扩展到所需的子句。