Hacker News new | ask | show | jobs
by nandemo 5346 days ago
Well, Haskell functions are curried, so you could think of the arity as always being 1. ;-)

If you're writing code, you can always use redundant parentheses at first. Then you refactor, gradually removing the parentheses or replacing them with an appropriate combination of ($) and (.).

Another useful thing to learn is how to write point-free code. An example:

    strToUpper xs = map toUpper xs
    strToUpper' = map toUpper
These are essentially the same function, but the latter is often preferred. Note also that they have the same type, namely String -> String.

If you're reading code and you find it hard to parse, you probably need to read easier code (for instance, from LYAH or RWH), but more likely you need to write more code of your own.

2 comments

Besides LY and RW, the Stanford lectures notes are an excellent resource:

http://www.scs.stanford.edu/11au-cs240h/notes/

https://github.com/bos/stanford-cs240h

Somewhere in here are notes from Washington U of St. Louis studnets that were really helpful:

http://www.haskell.org/haskellwiki/Tutorials

http://haskell.org/haskellwiki/Category:Tutorials

http://haskell.org/haskellwiki/Learning_Haskell

I know about currying, but there's still a certain meaning to arity even in this case.

It might be argued that on the long run the current syntax is better for the veteran Haskeller, but it's still some barrier to entry. I wonder if a Haskell IDE could have a 'clarify calls' mode that shows where each function argument goes or comes from..