Hi Simon, I think some recent patch has made some of my fusion rules stop matching.
the test case is: foo = B.map (+1) . B.filter (/=0) with ghc 6.4.2 and with older versions of ghc-6.5 (May 26th): 5 RuleFired 2 int2Word# 2 narrow8Word# 1 strTransformerBi/strTransformerBi with my recent ghc 6.5 (Jul 24th) that strTransformer rule no longer fires. the rule is fairly simple: "strTransformerBi/strTransformerBi" forall f g s. strTransformerBi f (strTransformerBi g s) = strTransformerBi (f . g) s from looking at -ddump-simpl-iterations we get something interesting: Main.foo :: Data.ByteString.Base.ByteString -> Data.ByteString.Base.ByteString [Exported] [Arity 1] Main.foo = \ (x_a1t7 :: Data.ByteString.Base.ByteString) -> Data.ByteString.FusionStream.strTransformerBi1 (Data.ByteString.FusionStream.mapS1 a_s1tf) (Data.ByteString.FusionStream.strTransformerBi1 (Data.ByteString.FusionStream.filterS1 a_s1th) x_a1t7) This is exactly the form that should be matched by the rule, except.. what is this strTransformerBi1 ? with the '1' suffix? Where did that come from and is that what's causing the rule not to match? It's not there in 6.4.2. The full code is available: darcs get http://www.cse.unsw.edu.au/~dons/code/fps-unstable I'm just going to build ghc head and see if the issues still exists. This is a bit of a problem for Dons and me at the moment because we need a single version of ghc to use to benchmark our various fusion systems for a paper. We could go back to the May 26th version I suppose. Duncan _______________________________________________ Glasgow-haskell-bugs mailing list Glasgow-haskell-bugs@haskell.org http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs