> This makes me wonder: does that mean there is no such thing as an > applicative transformer?
Applicative functors compose much more simply than monads, so you don't need transformers. > newtype Compose f g a = O (f (g a)) > unO (O x) = x > instance (Functor f, Functor g) => Functor (Compose f g) where > fmap f o = O $ fmap (fmap f) $ unO o > instance (Applicative f, Applicative g) => Applicative (Compose f g) where > pure x = O $ pure $ pure x > > -- unO of :: f (g (a -> b)) > -- unO ox :: f (g a) > -- to get result :: f (g b) > -- we need to lift of to f (g a -> g b) > -- which we do via (fmap (<*>)) :: f (g (a -> b)) -> f (g a -> g b) > of <*> ox = O ((<*>) <$> unO of <*> unO ox) Prettier implementations of this are available in the TypeCompose library. -- ryan _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe