<**> for nested applicative functors?

Does anyone know if it's possible to write the following: <**> :: (Applicative m, Applicative n) => m (n (a->b)) -> m (n a) -> m (n b) Clearly, if m and n were monads, it would be trivial. Rereading the original paper, I didn't see much discussion about such nested app. functors. Any help appreciated. -- View this message in context: http://www.nabble.com/%3C**%3E-for-nested-applicative-functors--tp25858792p2... Sent from the Haskell - Haskell-Cafe mailing list archive at Nabble.com.

On Mon, Oct 12, 2009 at 6:22 PM, Kim-Ee Yeoh
Does anyone know if it's possible to write the following:
<**> :: (Applicative m, Applicative n) => m (n (a->b)) -> m (n a) -> m (n b)
Clearly, if m and n were monads, it would be trivial.
Rereading the original paper, I didn't see much discussion about such nested app. functors.
Any help appreciated.
How about m <**> n = pure (<*>) <*> m <*> n Hth, Josef

This looks like what is described in Section 4 to me: http://www.haskell.org/haskellwiki/Applicative_functor#Applicative_transfome... - jeremy On Oct 12, 2009, at 11:22 AM, Kim-Ee Yeoh wrote:
<**> :: (Applicative m, Applicative n) => m (n (a->b)) -> m (n a) -> m (n b)

That's it: liftA2 (<*>), so obvious in hindsight. Mustn't ... code ... when ... drained .... Thanks to Jeremy and Josef. Jeremy Shaw-3 wrote:
This looks like what is described in Section 4 to me:
http://www.haskell.org/haskellwiki/Applicative_functor#Applicative_transfome...
- jeremy
On Oct 12, 2009, at 11:22 AM, Kim-Ee Yeoh wrote:
<**> :: (Applicative m, Applicative n) => m (n (a->b)) -> m (n a) -> m (n b)
-- View this message in context: http://www.nabble.com/%3C**%3E-for-nested-applicative-functors--tp25858792p2... Sent from the Haskell - Haskell-Cafe mailing list archive at Nabble.com.

Hi Kim-Ee,
This pattern shows up in "Applicative programming with effects" in showing
that the composition of applicatives is applicative: (<*>) = liftA2 (<*>),
and pure = pure.pure . (Really, you have to manage newtype wrappers as
well. See the TypeCompose library.)
- Conal
On Mon, Oct 12, 2009 at 9:52 AM, Kim-Ee Yeoh
That's it: liftA2 (<*>), so obvious in hindsight.
Mustn't ... code ... when ... drained ....
Thanks to Jeremy and Josef.
Jeremy Shaw-3 wrote:
This looks like what is described in Section 4 to me:
http://www.haskell.org/haskellwiki/Applicative_functor#Applicative_transfome...
- jeremy
On Oct 12, 2009, at 11:22 AM, Kim-Ee Yeoh wrote:
<**> :: (Applicative m, Applicative n) => m (n (a->b)) -> m (n a) -> m (n b)
-- View this message in context: http://www.nabble.com/%3C**%3E-for-nested-applicative-functors--tp25858792p2... Sent from the Haskell - Haskell-Cafe mailing list archive at Nabble.com.
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe

fmap (<*>) :: m (n (a -> b)) -> m (n a -> n b)
so
f <**> x = (fmap (<*>) f) <*> x
On Mon, Oct 12, 2009 at 9:22 AM, Kim-Ee Yeoh
Does anyone know if it's possible to write the following:
<**> :: (Applicative m, Applicative n) => m (n (a->b)) -> m (n a) -> m (n b)
Clearly, if m and n were monads, it would be trivial.
Rereading the original paper, I didn't see much discussion about such nested app. functors.
Any help appreciated.
-- View this message in context: http://www.nabble.com/%3C**%3E-for-nested-applicative-functors--tp25858792p2... Sent from the Haskell - Haskell-Cafe mailing list archive at Nabble.com.
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
participants (5)
-
Conal Elliott
-
Jeremy Shaw
-
Josef Svenningsson
-
Kim-Ee Yeoh
-
Ryan Ingram