Имея аппликативный функтор f
, у меня возникла идея создать новый аппликативный функтор Rev f
, подобный f
, но с обратным порядком эффектов. Вот:
import Control.Applicative
newtype Rev f a = Rev {unRev :: f a}
instance Functor f => Functor (Rev f) where
fmap f (Rev fx) = Rev (fmap f fx)
instance Applicative f => Applicative (Rev f) where
pure x = Rev (pure x)
(Rev ff) <*> (Rev fx) = Rev (pure (\x f -> f x) <*> fx <*> ff)
Мои вопросы
- Это действительный экземпляр
Applicative
(подчиняется ли он законамApplicative
)? - У этой конструкции есть название? Где-то в каком-то модуле это прячется?
Backwards
аппликативные функторы, вам также может понравитьсяData.Functor.Reverse
, который складывается и перемещается в обратном направлении. Вы также можете найти интересный преобразователь состоянияtardis
. - person dfeuer   schedule 13.12.2015