是否有寫如下的方式:有沒有辦法縮短這個派生子句?
{-# 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