-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Tasty.
On 04/09/11 12:34, Daniel Peebles wrote: > Hi all, > > I was wondering what people thought of a smarter do notation. Currently, > there's an almost trivial desugaring of do notation into (>>=), (>>), and > fail (grr!) which seem to naturally imply Monads (although oddly enough, > return is never used in the desugaring). The simplicity of the desugaring is > nice, but in many cases people write monadic code that could easily have > been Applicative. > > For example, if I write in a do block: > > x <- action1 > y <- action2 > z <- action3 > return (f x y z) > > that doesn't require any of the context-sensitivty that Monads give you, and > could be processed a lot more efficiently by a clever Applicative instance > (a parser, for instance). Furthermore, if return values are ignored, we > could use the (<$), (<*), or (*>) operators which could make the whole thing > even more efficient in some instances. > > Of course, the fact that the return method is explicitly mentioned in my > example suggests that unless we do some real voodoo, Applicative would have > to be a superclass of Monad for this to make sense. But with the new default > superclass instances people are talking about in GHC, that doesn't seem too > unlikely in the near future. > > On the implementation side, it seems fairly straightforward to determine > whether Applicative is enough for a given do block. Does anyone have any > opinions on whether this would be a worthwhile change? The downsides seem to > be a more complex desugaring pass (although still something most people > could perform in their heads), and some instability with making small > changes to the code in a do block. If you make a small change to use a > variable before the return, you instantly jump from Applicative to Monad and > might break types in your program. I'm not convinced that's necessary a bad > thing, though. > > Any thoughts? > > Thanks, > Dan > > > > > _______________________________________________ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe - -- Tony Morris http://tmorris.net/ -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iQEcBAEBAgAGBQJOYuR6AAoJEPxHMY3rBz0PRE8IAMK8sQTzxtgRYeWcyP6JmWso Yl3eDUjny2uMSzIkifJix/t7tYuYG092H6SvA5VhgVBPQUd8LnZH/91X3PDGANBu ufjmCJLuN5+bgeNxvyzBHwz5iYM3GOkPhGvpJ3hJzYFIBlDVnVmMNoCDkki46/nq xJ/gsAIwfgpe4+Ll1LWu9DjVaQHb9nWmdBpTvpbXb7W+WEX7MHIsVsP/KysVFZkc XwPESJntb7oTHCcS3q1GEVTYdMFNKHlWOFcrdkGGQlegvwfjdt221oVDNToZi4z1 wJ268MdvXLSVIcU+JHLYxElQj6zrf2D51oQbHWLS/wlHRnpZHU5gtmrMTKvPvf8= =d1uz -----END PGP SIGNATURE----- _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe