On Thursday 21 October 2010 01:11:25, wren ng thornton wrote: > On 10/20/10 7:07 PM, wren ng thornton wrote: > > On 10/20/10 7:09 AM, Simon Peyton-Jones wrote: > >> Yes, you can freely use Foo/unFoo. There's no runtime penalty. (In > >> the jargon of GHC's intermediate language, Foo and unFoo translate to > >> *type-safe casts*, which generate no executable code. > > > > When does the conversion to type-safe casts occur relative to other > > optimizations (namely, rewrite rules)? > > That is, I know that rewrite rules operate on the source language not on > Core, but to what extent does that mean that type-safe casts inhibit the > firing of rules?
Pretty much completely, I'm afraid. There's a rewrite rule for realToFrac :: Double -> Float. Build yourself a benchmark for that transformation that runs some measurable time (say 0.1 seconds or so). Now use a newtype wrapper around Float instead (and don't add a rewrite rule for it). Ouch. _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
