是否有写如下的方式:有没有办法缩短这个派生子句?
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveAnyClass #-}
data X = A | B | C
deriving (Eq, Ord, Show, Read, Data, SymWord, HasKind, SMTValue)
从而使deriving
子句可以以某种方式缩短,为类似以下内容:
data X = A | B | C deriving MyOwnClass
我想避免TH如果在所有可能的,我很高兴创建一个新的类,必要时将所有派生类作为其超类(如上面的MyOwnClass
),但这并不适用于deriving
机制。随着约束种扩展,我发现,你可以这样写:
type MyOwnClass a = (Eq a, Ord a, Show a, Read a, Data a, SymWord a, HasKind a, SMTValue a)
不幸的是,我不能忍受的是,deriving
子句。有没有什么神奇的做法呢?
编辑从评论看来,TH可能是唯一可行的选择。 (CPP宏真的不行!)如果是这样的话,TH解决方案的草图将很好看。
'derivation'从句实际上是魔术。没有TH,恐怕没有办法做到你想做的事。 –
考虑在https://github.com/haskell/rfcs中制作RFC – baxbaxwalanuksiwe