[Haskell-cafe] Another point-free question (>>=, join, ap)

Edsko de Vries devriese at cs.tcd.ie
Sat Feb 14 05:05:51 EST 2009


On Fri, Feb 13, 2009 at 05:21:50PM +0100, Thomas Davie wrote:
> 
> >Hey,
> >
> >Thanks for all the suggestions. I was hoping that there was some  
> >uniform
> >pattern that would extend to n arguments (rather than having to use
> >liftM2, litM3, etc. or have different 'application' operators in  
> >between
> >the different arguments); perhaps not. Oh well :)
> 
> Sure you can!  What you want is Control.Applicative, not Control.Monad.
> 
> (<*>) is the generic application you're looking for:
> 
> > pure (+) <*> [1,2,3] <*> [4,5,6]
> [5,6,7,6,7,8,7,8,9]
> 
> Note that pure f <*> y can be shortened to fmap though, which  
> Control.Applicative defines a handy infix version of:
> > (+) <$> [1,2,3] <*> [4,5,6]
> [5,6,7,6,7,8,7,8,9]
> 
> Hope that provides what you want

Hi Bob,

Thanks for the suggestion, but that solution does not work when the
function I want to apply (in your case, +) is monadic itself. Then I'd
still have to write

join $ f <*> [1,2,3] <*> [4,5,6]

:(

Edsko


More information about the Haskell-Cafe mailing list