Я пытаюсь создать абстракцию в Haskell98, но не знаю, как это сделать.
Я хочу определить класс для типов, которые могут быть преобразованы в списки.
toList :: a -> [b]
Но я не знаю, как определить класс для этого метода. Я выдвинул следующие три идеи:
class ToList a b where
toList :: a -> [b]
class ToList a where
toList :: a -> [b]
class ToList a where
toList :: a b -> [b]
Первый из них не работает, потому что Haskell98 не поддерживает несколько классов параметров.
Второй не работает, потому что b зависит от a и не может быть реализован для каждого b.
Третий тоже не работает, потому что я не знаю, как создать экземпляр класса с типом, где 'b' не является последним параметром типа.
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
или
toList Nil = []
toList Node x y l r = toList l ++ [x] ++ toList r
Как бы я сделал что-то подобное?