Haskell98 で抽象化を試みていますが、その方法がわかりません。
私がやりたいことは、リストに変換できる型のクラスを定義することです。
toList :: a -> [b]
しかし、このメソッドのクラスを定義する方法がわかりません。以下の3つの案を出しました。
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 に対して実装できないため、2 番目の方法は機能しません。
「b」が最後の型パラメーターではない型でクラスをインスタンス化する方法がわからないため、3番目も機能しません。
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
どうすればそのようなことをするでしょうか?