# [plt-scheme] Re: to define, or to let (last try)

On Tue, 27 Apr 2004, Paul Schlie wrote:
>* - still waiting to see someone produce a explicit code fragment which
*>* demonstrates the value of unspecified evaluation order, as many counter
*>* examples have already been produced. If none can be produced, then maybe
*>* it's perceived merits should be reconsidered.
*
In this regard, let me quote Simon Peyton Jones "Wearing the Hair Shirt -
A restrospective on Haskell". I see it as somewhat relevant to the
discussion:
SPJ:
>* Which would you prefer?
*>* do a <-f x OR h (f x) (g y)
*>* b <-g y
*>* h a b
*>*
*>* In a commutative monad, it does not matter whether we do (f x) first or
*>* (g y).
*>* Commutative monads are very common. (Environment, unique supply, random
*>* number generation.)
*>* For these, monads over-sequentialise. Wanted: theory
*>* and notation for some cool compromise.
*
Currently Scheme's unspecified evaluation order indeed gives us a way to
notationallly distinguish computations whose side effects are commutative
in exactly this sense. Examples as suggested by SPJ above are
(+ (random) (random))
(list (gensym) (gensym) (gensym))
etc.