我想在Haskell98中做一些抽象,但不知道如何去做。haskell类型类中的多个类型参数
我想要做的是为可能转换为列表的类型定义一个类。
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
我怎么会做这样的事情?