[Haskell-cafe] trace output statements

erik eraker at gmail.com
Mon Dec 24 02:52:37 UTC 2018


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 at 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 at 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 at jaguarpaw.co.uk
> >    2. http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20181223/ed1cfba6/attachment.html>


More information about the Haskell-Cafe mailing list