
Specifically for this code:
gTst3 right left = if (lr > ll) then False else True
where lr = length (right ! 2)
ll = length (left ! 2)
why don't you just negate the condition, like:
gTst3 right left = (lr <= ll)
where lr = length (right ! 2)
ll = length (left ! 2)
2009/1/5 Murray Gross
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
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
-- Rafael Gustavo da Cunha Pereira Pinto Electronic Engineer, MSc.