Есть ли способ "поднять" экземпляр класса в Haskell легко?
Мне часто приходилось создавать, например, Num экземпляры для некоторых классов, которые просто "поднимают" структуру Num через конструктор типа следующим образом:
data SomeType a = SomeCons a
instance (Num a)=>Num SomeCons a where
(SomeCons x) + (SomeCons y) = SomeCons (x+y)
negate (SomeCons x) = SomeCons (negate x)
-- similarly for other functions.
Есть ли способ избежать этого шаблона и "поднять" эту структуру Num автоматически? Обычно я должен делать это с помощью Show и других классов, когда я пытался изучить существующие имена, и компилятор не разрешил мне использовать deriving(Show)
.