Ah, I see. I erroneously assumed binary operators would be defined in similar ways but I realize that's perhaps naive because with addition you're never not going to evaluate both sides, unlike with booleans.

That's interesting. Thanks for responding.

On Sun, Dec 23, 2018, 2:26 PM Ian Denhardt <ian@zenhack.net wrote:
There are no guarantees about in what order these things will be
evaluated. The compiler is well within its rights to evaluate
the expressions in any order, or more than once even (though IIRC
ghc never does the latter). The left-to-right ordering holds for &&
because the Haskell report specifically defines[1] it as:

    True  && x       =  x
    False && _       =  False

In this case the compiler can't in general evaluate the RHS first,
because if the LHS is False and the RHS is bottom, this would be
incorrect. But this is due to the semantics of &&, and doesn't hold in
general.

-Ian

[1]: https://www.haskell.org/onlinereport/haskell2010/haskellch9.html#x16-1710009

Quoting erik (2018-12-23 15:19:04)
>    Tom,
>    Why does "b" evaluate before "a" in your example? I would have thought
>    left-hand and then right-hand if needed. I'm on my phone but I'd like
>    to try the same example with booleans and `&&` instead of `+`.
>    Erik
>    On Sat, Dec 22, 2018, 11:40 PM Tom Ellis
>    <[1]tom-lists-haskell-cafe-2017@jaguarpaw.co.uk wrote:
>
>      On Sat, Dec 22, 2018 at 09:52:18AM +0100, Damien Mattei wrote:
>      > i have inserted trace statement that output variable
>      > ... i have strange behavior of output:
>      Let's take a simpler example.�  Do you understand why the trace
>      statments
>      from this small program appear in the order that they do?�  (And for
>      what
>      it's worth I really think you'll be better off writing programs
>      using do
>      notation).
>      % cat test.hs
>      import Debug.Trace
>      result =
>      �  let a = trace "evaluating a" 2
>      �  �  �  b = trace "evaluating b" 10
>      �  �  �  c = trace "evaluating c" (a + b)
>      �  in c
>      ~% ghci -e result test.hs
>      evaluating c
>      evaluating b
>      evaluating a
>      12
>      _______________________________________________
>      Haskell-Cafe mailing list
>      To (un)subscribe, modify options or view archives go to:
>      [2]http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
>      Only members subscribed via the mailman list are allowed to post.
>
> Verweise
>
>    1. mailto:tom-lists-haskell-cafe-2017@jaguarpaw.co.uk
>    2. http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe