Content deleted Content added
→Optimizations: separate things, so add some whitrespace |
references section |
||
Line 16:
==Optimizations==
The mathematical basis of maps allow for a number of [[optimization]]s. If one has <code>map f . map g</code> ('.' is function application; <code>map f (map g xs)</code> is equivalent) then it is the same as the simpler <code>map (f . g) xs</code>; that is, <math>\left( m f \right) \circ \left( m g \right) = m\left( f \circ g \right) </math>. This particular optimization eliminates a possibly expensive second map by fusing it with the first map; thus it is a "map fusion"<ref>[http://www.randomhacks.net/articles/2007/02/10/map-fusion-and-haskell-performance "Map fusion: Making Haskell 225% faster"]</ref>.
Map functions can and often are defined in terms of a [[Fold (higher-order function)|fold]] such as <code>foldr</code>, which means one can do a "map-fold fusion": <code>f z . map g</code> is equivalent to <code>foldr (f . g) z</code>.
Line 24:
* <code>fmap id = id (identity)
* <code>fmap (f . g) = fmap f . fmap g (composition)</code>
==References==
<References/>
==See also==
|