Specifically for this code:
gTst3 right left = if (lr > ll) then False else Truewhy don't you just negate the condition, like:
where lr = length (right ! 2)
ll = length (left ! 2)
gTst3 right left = (lr <= ll)
where lr = length (right ! 2)
ll = length (left ! 2)
No unsafe perform (except what may be hidden in trace), nothing, fancy, no gimmicks (very pedestrian, even heavy-handed) code. Complete code is attached (I don't have smaller snippets, because I just discovered the problem).
Best,
Murray Gross
On Mon, 5 Jan 2009, Luke Palmer wrote:
On Mon, Jan 5, 2009 at 4:34 PM, Murray Gross <mgross21@verizon.net> wrote:
When using any of -O, -O1, -O2 with the Debian binary build of GHC 6.6,
trace shows that the expression
if (lr > ll) then False else True
is (at least partially) evaluated, but the value returned is always True,
even though trace reports that (lr > ll) is True. When I use only the native
code generator (without optimization), the correct value (False) is
returned.
Further detail and complete code on request.
Of course! This is obviously incorrect behavior. Are you doing any
unsafePerformIO? Please, complete code (minimal test case if possible, but
don't let that stop you).
Luke
Best,
Murray Gross
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe