Estoy tratando de hacer algo de abstracción en Haskell98 pero no sé cómo hacerlo.parámetros de tipos múltiples en las clases de tipo haskell
Lo que quiero hacer es definir una clase para los tipos que se pueden convertir en listas.
toList :: a -> [b]
Pero no sé cómo definir una clase para este método. Planteé las siguientes tres ideas:
class ToList a b where
toList :: a -> [b]
class ToList a where
toList :: a -> [b]
class ToList a where
toList :: a b -> [b]
La primera no funciona porque Haskell98 no permite múltiples clases de parámetros.
El segundo no funciona porque b depende de ay no se puede implementar para cada b.
El tercero tampoco funciona porque no sé cómo instanciar la clase con un tipo donde 'b' no es el último parámetro de tipo.
data HTree a b = Nil | Node a b (HTree a b) (HTree a b)
toList Nil = []
toList Node x y l r = toList l ++ [(x,y)] ++ toList r
o
toList Nil = []
toList Node x y l r = toList l ++ [x] ++ toList r
¿Cómo iba a hacer algo así?