Haskell: The Confusing Parts
echo.rsmw.net
echo.rsmw.net
This is one of the things I prefer about Lisp. Am I the only one who still has to stop and think occasionally about what binds more tightly with what when reading and writing code in languages with many precedence levels? Never a problem in a Lisp.
forM [1..] $ \n -> do
a <- monadicAction1 n
b <- monadicAction2 a
return b
Which is sort of ugly from a Lisp point of view, but I think it's a great trick enabled by having $ be an ultra-low precedence sequencing combinator. It looks like a Ruby block almost, but has zero extra syntax and very clear semantics.In particular, operators like ($) and (.) are hugely beneficial and the latter's existence is one of the main reasons people like Haskell's syntax.
I had a look at the source in Safari and there's little contentious on there. No JavaScript, Flash, or whatever. The only oddity is some horrifically formatted HTML with the end of tags coming on the next line every time - could merely that be killing FF though?
Someone report the bug, I'm too lazy.
Anyway, the Typeclassopedia is recommended reading: http://www.haskell.org/haskellwiki/Typeclassopedia
Once you understand the relationship between functions, applicative functors, monads, and arrows, everything will make sense -- they are all the same thing.
(The next issue is, "why would I want this kind of abstraction", but that's best for you to decide on your own.)