
Am Donnerstag, 15. Januar 2009 22:57 schrieb Han Joosten:
I hardly use any let expressions (shame on me??) and I am not very familiar with them. But I figured out you might have mistaken, so I changed the bit to: antecedent :: Rule -> Expression antecedent r = case r of Ru{} -> if (rrsrt r == AlwaysExpr) then error ("(Module ADLdataDef:) illegal call to antecedent of rule "++show r) else rrant r Sg{} -> antecedent (srsig r) Gc{} -> let x = grspe r in r `seq` Tm x Fr{} -> frcmp r
Perhaps you should have replaced both occurrences of 'r' with 'x': Gc{} -> let x = grspe r in x `seq` Tm x (That may or may not make a difference, depends on what your code actually does). Should be worth a try anyway. Also, try compiling with -O2 to see if that makes a difference.