Tengo clases de tipo, para todas las cuales me gustaría tener un comportamiento común. Mi problema se explica en el siguiente código:Haskell No se pudo deducir ... del error de contexto
class A a class B b class X x where method :: (A a, B b) => x -> a -> b data T = L | M | N data U = P | Q | R instance A T instance B U data Y = ZZZ instance X Y where method _ L = P method _ M = Q method _ N = R
Cuando cargo este módulo, me sale el siguiente error:
example.hs:19:14: Could not deduce (a ~ T) from the context (A a, B b) bound by the type signature for method :: (A a, B b) => Y -> a -> b at example.hs:(17,5)-(19,18) `a' is a rigid type variable bound by the type signature for method :: (A a, B b) => Y -> a -> b at example.hs:17:5 In the pattern: N In an equation for `method': method _ N = R In the instance declaration for `X Y' example.hs:19:18: Could not deduce (b ~ U) from the context (A a, B b) bound by the type signature for method :: (A a, B b) => Y -> a -> b at example.hs:(17,5)-(19,18) `b' is a rigid type variable bound by the type signature for method :: (A a, B b) => Y -> a -> b at example.hs:17:5 In the expression: R In an equation for `method': method _ N = R In the instance declaration for `X Y' Failed, modules loaded: none.
estoy a saber qué hacer en este caso. Incluso cuando T y U son instancia de A y B, obtengo este error. Si no puedo devolver un valor de tipo rígido de method
, ¿cómo codifico esta parte?
posible duplicado de [listas de tipos de datos: "no se pudo deducir (un ~ SomeType) del contexto (SomeTypeclass a)"] (http://stackoverflow.com/questions/5453514/lists-of-data-types -podría-no-deducir-un-tipo-del-contexto-tipo) – Landei