[commit: containers] master: Overhaul INLINE and INLINABLE in Map and Set. (3f798e3)
Ian Lynagh
igloo at earth.li
Thu Feb 23 01:15:17 CET 2012
Repository : ssh://darcs.haskell.org//srv/darcs/packages/containers
On branch : master
http://hackage.haskell.org/trac/ghc/changeset/3f798e333509f02eb44d39a41068c76863064097
>---------------------------------------------------------------
commit 3f798e333509f02eb44d39a41068c76863064097
Author: Milan Straka <fox at ucw.cz>
Date: Fri Nov 25 15:55:06 2011 +0100
Overhaul INLINE and INLINABLE in Map and Set.
* Rename INLINEABLE -> INLINABLE
Though both work, the latter is the preferred according the docs.
* Remove INLINABLE on methods not using type classes, as INLINABLE has
real effect only on functions that use type classes (they get
specialised in the call-site module).
It also allows worker-wrapper transform on functions not marked
INLINABLE (which surprisingly did not happen with INLINABLE).
* In GHC, INLINing the INLINABLE method as in
update f = updateWithKey (\_ x -> f x)
{-# INLINE update #-}
updateWithKey = ...
{-# INLINABLE updateWithKey #-}
does not produce wanted result -- the updateWithKey does not get
specialized in the call-site module.
The solution is to mark both functions INLINABLE.
* Mark trivial functions as INLINE.
Data/Map/Base.hs | 218 +++++++++++++---------------------------------------
Data/Map/Strict.hs | 101 +++++++++----------------
Data/Set.hs | 85 +++-----------------
3 files changed, 103 insertions(+), 301 deletions(-)
Diff suppressed because of size. To see it, use:
git show 3f798e333509f02eb44d39a41068c76863064097
More information about the Cvs-libraries
mailing list