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
Пусть наша "хорошесть" — это просто
Bool
, в смысле "подходит/не подходит". Для конечного типа можно сделать совершенно точную поисковую функцию: Конечно, если наш критерий не выполняется никогда, то мы получим не подходящий ответ; но это лучшее, что мы можем сделать.Для пар точная поисковая функция делается очень просто: А теперь берём потоки: и определяем поисковую функцию: Самое смешное, что это работает. Но! Если наш критерий — тотальная функция. Тогда поиск найдёт нам то, что надо.
no subject
no subject