独自のデータ型を作成し、次のように functor メソッドを実装しようとしています。
data Hieu a = Hieu [a] deriving (Show, Read, Eq)
instance Functor Hieu where
fmap f (Hieu [x]) = Hieu (f [x])
これは非常に単純なコードですが、失敗しました。理由を説明できますか?
ご回答ありがとうございます。これで、functor を 1 つのケースにのみ適用することがわかりました。map を使用せずに、次のように書き換えてみました
data Hieu a = Hieu [a] deriving (Show, Read, Eq)
consHieu :: a -> (Hieu a) -> (Hieu a)
consHieu x (Hieu xs) = Hieu (x:xs)
instance Functor Hieu where
fmap f (Hieu (x:xs)) = consHieu (f x) (fmap f (Hieu xs))
fmap f (Hieu []) = Hieu []
ご回答ありがとうございます。これで、functor を 1 つのケースにのみ適用することがわかりました。map を使用せずに、次のように書き換えてみました
データ Hieu a = Hieu [a] の導出 (Show、Read、Eq)
consHieu :: a -> (Hieu a) -> (Hieu a)
consHieu x (Hieu xs) = Hieu (x:xs)
インスタンス Functor Hieu where
fmap f (Hieu (x:xs)) = consHieu (f x) (fmap f (Hieu xs))
fmap f (Hieu []) = Hieu []