6
Учитывая прикладной функтор 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. – dfeuer