Your FMLists are defaulting to Integer, so the rule (which specifically mentions Int) doesn't apply. Simon's code doesn't have this problem because of the explicit signature on "upto"; you could do the same by limiting "singleton" to Int.
-- ryan On Wed, Jun 24, 2009 at 12:44 AM, Sjoerd Visscher<[email protected]> wrote: > Thanks for looking into this. > > Your code does give me 2 firings. But not when I replace [] with FMList. See > the attached code. > > > > > > Sjoerd > > On Jun 23, 2009, at 5:59 PM, Simon Peyton-Jones wrote: > >> | I have a rewrite rule as follows: >> | >> | {-# RULES >> | "transform/transform" forall (f::forall m. Monoid m => (a -> m) -> (b - >> | > m)) >> | (g::forall m. Monoid m => (b -> m) -> (c >> | -> m)) >> | (l::FMList c). transform f (transform g >> | l) = transform (g.f) l >> | #-} >> | >> | It fires on this code: >> | >> | print $ transform (. (*2)) (transform (. (+1)) (upto 10)) >> | >> | But it doesn't fire on this code: >> | >> | print $ map (*2) (map (+1) (upto 10))) >> >> That's odd. It works for me. >> >> Specifically, I compiled the attached code with GHC 6.10, and I get two >> firings of transform/transform. >> >> Does that not happen for you? >> >> Simon >> >> <Rules.hs> > > -- > Sjoerd Visscher > [email protected] > > > > > _______________________________________________ > Haskell-Cafe mailing list > [email protected] > http://www.haskell.org/mailman/listinfo/haskell-cafe > > _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
