Difference between revisions of "How to read Haskell"
Jump to navigation
Jump to search
Line 9: | Line 9: | ||
-- something we can work through slowly (and show why we find it beautiful) |
-- something we can work through slowly (and show why we find it beautiful) |
||
</haskell> |
</haskell> |
||
+ | |||
+ | === Hint: order doesn't matter === |
||
+ | |||
+ | Outside of a monad, it really doesn't matter what order things in Haskell code appear. So if you see something like this... |
||
+ | <haskell> |
||
+ | foo = whatTheHeckIsBar |
||
+ | </haskell> |
||
+ | you should take into account that <code>whatTheHeckIsBar</code> may be defined somewhere ''below'' <code>foo</code> |
||
+ | |||
+ | :* ''scope in a nutshell'' |
||
+ | :* ''except for monads? explain'' |
||
=== Hint: use type signatures === |
=== Hint: use type signatures === |
Revision as of 10:53, 3 August 2006
This stub is intended to become a tutorial on reading Haskell. It's aimed at the non-Haskeller who probably doesn't care too much about trying to write code, but wants to understand it.
The tutorial
...needs to be written
-- insert here some horrible (for the non-Haskeller) long example
-- something we can work through slowly (and show why we find it beautiful)
Hint: order doesn't matter
Outside of a monad, it really doesn't matter what order things in Haskell code appear. So if you see something like this...
foo = whatTheHeckIsBar
you should take into account that whatTheHeckIsBar
may be defined somewhere below foo
- scope in a nutshell
- except for monads? explain
Hint: use type signatures
When you see stuff like this
-- example please!
foo :: Bar Ping Pong -> Baz Zed Dubya -> IO (DoublePlus Good)
...don't fight it! These are type signatures and they are an incredibly useful way of getting a rough idea what a function is supposed to do.
- elaborate
What confuses non-Haskellers
Since this tutorial is not yet written, we encourage you to note here the things which confuse non-Haskellers about the code code.
- layout instead of semicolons?
- super-super-concise stuff (things using liftM and liftM2)
- the difference between and
x <- foo
x = foo