Есть ли способ легко "поднять" экземпляр класса в 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 и другими классами, когда я пытаюсь изучить existencials, и компилятор не позволяет мне использовать deriving(Show)
.