Proposal: Applicative => Monad: Call for consensus

Maciej Piechotka uzytkownik2 at gmail.com
Thu Jan 6 21:09:35 CET 2011


On Thu, 2011-01-06 at 12:35 -0500, Tyson Whitehead wrote:
> On January 6, 2011 11:42:09 Iavor Diatchki wrote:
> > > AFAIU, In applicative style programming "join" has proven to be a lot
> > > more useful than "bind".
> > 
> > I am not sure what you mean here, I find the "do" notation quite useful.
> 
> I think he was meaning when you are using monads in a more "function style" 
> (applicative) than "imperative style" (do notation).
> 
> As an example, consider the definition of ">>=" using join and the "$" and 
> "<$>" application operators
> 
> x >>= f = join $ f <$> x
> 
> versus that using "do" notation
> 
> x >>= f = do
>   x' <- x
>   f x'
> 

I guess that in both cases it should be written as x >>= f.

Maybe better example:

doA :: String -> String -> String -> IO String
doB :: IO String

doC = join $ doA <$> doB <*> doB <*> doB

vs.

doC = do
  x <- doB
  y <- doB
  z <- doB
  doA x y z

> 
> Obviously both notations have their places, "do" is usually nicer if I want to 
> use values multiple times, while "applicative style" is usually nicer if I am 
> just unpacking values for an application.  I suspect "do", however, tends to 
> get overused simply because that is what monad tutorials teach.
> 
> Cheers!  -Tyson

I noticed that for people unfamiliar with Haskell the do notation is
simpler. However as they get used to they learn to appreciate:

data Function = Function Ident Args Type

function = Function <$> ident <*> args <*> returnType

or similar constructions in simpler ('applicative') cases.

Regards
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: This is a digitally signed message part
URL: <http://www.haskell.org/pipermail/libraries/attachments/20110106/532a8747/attachment.pgp>


More information about the Libraries mailing list