Matthew Brecknell wrote:
There is the question of whether it's preferable to use the "let" form
or the "fix" form for embedding a recursive function in the middle of a
do-block. I don't know if there's any consensus on this question, but it
seems to me to be about whether one prefers to read a function top-down
or bottom-up. I think I'm about 80/20 top-down/bottom-up. When I read a
"let", I know (due to laziness) that it doesn't have any effect until
the bindings are used, so I usually find myself scanning forward to find
those uses. When I read "fix \f -> ...", I see exactly how the
(anonymous) function is used, just before I get to its definition. So
fix helps me to see things in a mostly top-down fashion.


If you're merely talking about top-down or bottom-up then there is also 'where' rather than 'let'.

So the question becomes:

1. recursive definition first (let)
2. recursive definition last (where)
3. recursion inline (explicit use of fix)

1+2 have the virtue of separating the local recursive function from the 'main' function. On the other hand, 3 has the virtue of keeping them together :) Which you prefer is quite subjective, and context dependent.

They potentially have slightly different scoping implications, too.

A lot of discussion about haskell code revolves around whether or not a given construction is 'clear'; this has something to do with haskell's almost unparallelled ability to abstract, I suppose. Ultimately, something is clear once you are used to the abstraction, but obfuscated if you're not, so it becomes rather subjective.

Jules

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to