Entry tags:
Экспоненциальное офункторивание
Как вам скорее всего известно, написать представителя класса типов Functor для типа эндоморфизма невозможно. Если неизвестно, то можете попробовать
Вот вам другой экспоненциальный тип данных, для которого, однако, написать законного представителя класса типов Functor можно:
newtype Endo a = Endo (a -> a) instance Functor Endo where fmap f (Endo g) = Endo undefinedДаже если ваш результат сойдется по типам, законам для функтора он удовлетворять не будет.
Вот вам другой экспоненциальный тип данных, для которого, однако, написать законного представителя класса типов Functor можно:
newtype Quest b a = Quest ((a -> b) -> a) instance Functor (Quest b) where fmap f (Quest g) = Quest undefinedПопробуйте сделать это, после чего ответьте на вопрос: чему равен результат такого вызова
> let Quest f = fmap succ $ Quest (\h -> h 40) in f id
no subject
https://gist.github.com/thedeemon/ddf63573f089dff61aae
Просто по типам разворачиваешь, не думая.
no subject