On Sat, Nov 22, 2008 at 2:31 AM, Owen Smith <[EMAIL PROTECTED]> wrote: > 2. There's a lot I need to learn about good Haskell style, especially > coming from a C++ background. Even my experience in Lisp seems to > result in way more parentheses than Haskell coders are comfortable > with. :-) In particular, I'm curious about how people actually use > monadic operators. The following simple forms with the Maybe monad, > for example, appear to be equivalent (hope I and QuickCheck are right > about that!): > > foo :: Int -> Maybe Int > bar :: Int -> Maybe Int > baz :: Int -> Maybe Int > > baz n = (foo n) >>= bar > baz n = bar =<< (foo n) > baz n = (foo >=> bar) n > baz n = (foo <=< bar) n > > and I'm thinking the latter two are more idiomatically written as: > > baz = foo >=> bar -- I think this one is my fave, naively speaking > baz = bar <=< foo
You will find many differing opinions about this; just pick one that you find pretty and elegant. My personal style is never to use >>= or >=>; only =<< and <=<. These operators are for when I want monadic operations to feel like function application, which has the data flowing right to left. When I want monadic operations to feel like sequencing, I always use do notation. This is a particular case of my general inclination to have data in my progarm flow from top to bottom and right to left. (However I still often "read" it left to right; but I am inconsistent about that, and often switch back and forth when trying to comprehend a piece of code) Luke _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe