On 10/07/2013, at 8:42 PM, Andreas Abel wrote:
>> 
>>> Hear, hear! In OCaml, I can (and often do) write
>>> 
>>>         let (x,s) = foo 1 [] in
>>>         let (y,s) = bar x s in
>>>         let (z,s) = baz x y s in ...

I really wish you wouldn't do that.

After reading Dijkstra's paper on the fact that we have
small heads many years ago -- long enough to forget the
actual title, sorry -- I realised that I too was a Bear
of Very Little Brain and Get Confused Very Easily.

I find that that when the same name gets reused like
that I get very confused indeed about which one I am
looking at right now.

If the variable is hidden (as by the DCG transformation
in Prolog, or a state monad, I don't get confused about
the variable because it isn't visible.

If each instance of the variable is labelled with a
sequence number, I don't get confused because each
variable has a different name and I can *see* which
one this is.

Yes, sequence numbering variable states is a chore for
the person writing the code, but it's a boon for the
person reading the code.

Me, I'd be perfectly happy with

setup (x,s) = state (\_ -> (x,s))

        (setup $ foo 1 []) >>= \x ->
        bar x >>= \y ->
        baz x y >>= \z ->
        ...

One reason for this is that it makes refactorings like
extracting bar ... >>= ... baz ... thinkable.  A long
sequence of updates is probably crying out for such a
refactoring.


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

Reply via email to