Я изучаю основные классы типа и написал свою собственную реализацию functor
для моего типа Test a
(ведет себя так же, как Maybe
):Написание экземпляра экземпляра generic для конструкторов типов?
data Test a = Test a | Emp
class FC c a where
t :: (a -> b) -> c a -> c b
instance FC Test a where
t f (Test a) = Test (f a)
t f (Emp) = Emp
instance FC Maybe a where
t f (Just a) = Just (f a)
t f (Nothing) = Nothing
Можно ли реализовать что-то вроде:
instance FC c where
t f (c v) = c (f v)
Ошибка:
Parse error in pattern: c
Другими словами, отвлечь конструктор типа, заменить с c
и v
, поэтому создается общий экземпляр, который может быть применен к любому значению с помощью контекста?