CSE runs before SpecConstr
SpecConstr can lead to more CSE opportunities. Currently CSE is run only once after the full laziness transformation but then not again later in the pipeline. Running it again after the final clean-up simplification might lead to smaller programs.
One example with
module Foo where main :: [Int] main = drop 1 [1,2] mainMODULE :: [Int] mainMODULE = mydrop 1 [1,2] mydrop :: Int -> [a] -> [a] mydrop 0 xs = xs mydrop n (x:xs) = mydrop (n-1) xs