Given an applicative functor f
, I had an idea of making a new applicative functor Rev f
like f
but with the order of effects reversed. Here it is:
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)
My questions are
Applicative
instance (does it obey the Applicative
laws)?The friendly folks on IRC pointed to the Backwards
applicative offered by the transformers
package. You may also like the (<**>)
operator available in the standard library.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With