我正在尝试在 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
我该怎么做这样的事情?