Экспоненциальное офункторивание
Nov. 5th, 2015 10:33 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Как вам скорее всего известно, написать представителя класса типов 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
Date: 2015-11-05 07:56 pm (UTC)no subject
Date: 2015-11-05 08:39 pm (UTC)no subject
Date: 2015-11-05 08:56 pm (UTC)