¿Hay alguna manera de "levantar" una instancia de clase en Haskell fácilmente?Instancia de clase de elevación en Haskell
he estado con frecuencia la necesidad de crear, por ejemplo, casos Num para algunas clases que son sólo la estructura Num "lifting" a través del constructor de tipos como este:
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.
¿Hay una manera de evitar esto repetitivo y "levantar" esta estructura Num automáticamente? Normalmente tengo que hacer esto con Show y otras clases también cuando estaba tratando de aprender existencials y el compilador no me dejaba usar deriving(Show)
.
Hum ... ¿Por qué esto funciona con newtype pero no con los datos? –
Como un newtype no puede agregar constructores o campos, simplemente vuelve a envolver un tipo existente. Esto garantiza que la extensión puede funcionar con cualquier clase, en lugar de solo las clases que normalmente puede derivar para cualquier tipo de datos. – Martijn