[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