Type classes - instancia de superclase

Type classes - instancia de superclase

de Ana Laura Rodriguez Colesnik -
Número de respuestas: 2

Buenas, tengo una duda en uno de los ejercicios de la clase teórcia de Tipe Classes.
Se definen:

class A a where
  fA :: a -> a -> Bool

class A a => B a where
  fB :: (a,a) -> Bool

instance A Char where
  fA = (/=)

instance B Char where
  fB = uncurry (==)

foo x y = fB (x, 'a') && fB (y, y) && fA y y

No me queda claro por qué es necesaria la instancia (A Char), para que compile.
En respuesta a Ana Laura Rodriguez Colesnik

Re: Type classes - instancia de superclase

de Marcos Viera - InCo -
Hola,

Dado que la clase B está definida:

class A a => B a where
fB :: (a,a) -> Bool

la herencia nos impone la restricción de que para poder definir una instancia de B, tiene que existir una instancia de A.
Entonces al definir la instancia:

instance B Char where
fB = uncurry (==)

para que esto compile tiene que existir una instancia (A Char).