Simon,

Thanks a lot for looking into this. One question regarding maps that I still don't understand: can you explain me if it is indeed to be expected that GHC won't fuse `map f . map g` into `map (f . g)` by default? Also, same for `map f [x]` ~> `[f x]`?

Regarding your reply:

2012/3/9 Simon Peyton-Jones <simonpj@microsoft.com>
You wondered why it made a difference whether you said

  instance GEnum Nat where
    genum = map to genum'
or
  instance GEnum Nat    -- Fill in from default method

Well, it turns out that the difference is largely accidental.

I understand your explanation for why this can result in different behaviour. But I think we should try to find a way to address this. We came up with DefaultSignatures to simplify instantiating generic functions, but now it turns out that using them can make the code slower! This is rather unexpected. Could we perhaps have a way to let users specify rewrite rules involving `cast`?


Cheers,
Pedro