Я пытаюсь сделать некоторую абстракцию в 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
or
toList Nil = []
toList Node x y l r = toList l ++ [x] ++ toList r
Как бы я сделал что-то подобное?