Roman, Don,

I have finally found time to fix this (see Roman's message below).  Once I 
found the problem it was easy to fix. Now SpecConstr should work just fine on 
Booleans.  I'm guessing this will also solve Don's problem alluded to here:

| Oh, this is slower than it should be, too. Those Bools get in the way of
| GHC's specConstr optimisation. Instead it shoudl use a strict Either.

(Bools never got in the way; but SpecConstr was stupid.  Forget those Eithers!)

This email may overtake my push, but the push message should be obvious

Simon

| 2. No SpecConstr for Bools
|
| foo :: Bool -> Int -> Int
| foo True  0 = 0
| foo True  n = foo True (n-1)
| foo False n = foo True n
|
| For foo we get
|
| foo b (I# n) = I# ($wfoo b n)
| $wfoo True  0 = 0
| $wfoo True  n = $wfoo True (n -# 1)
| $wfoo False n = $wfoo True n
|
| Here, we have a conditional in every iteration which is definitely not what 
we want! In particular, it
| prevents Bools (and, I guess, enumerations in general) from ever being used 
in seeds.

_______________________________________________
Cvs-ghc mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/cvs-ghc

Reply via email to