Repository : ssh://darcs.haskell.org//srv/darcs/packages/base On branch : master
http://hackage.haskell.org/trac/ghc/changeset/9aa29b806cb9e6c23adf6deb50a1bd14487487a4 >--------------------------------------------------------------- commit 9aa29b806cb9e6c23adf6deb50a1bd14487487a4 Author: Daniel Fischer <[email protected]> Date: Thu Dec 6 16:38:12 2012 +0100 Worker/Wrapper and static argument transform for `until` so it can be inlined With the direct top level recursion, `until` cannot be inlined by GHC, so no strictness analysis and consequently no unboxing occurs at the call site. With the recursion delegated to the worker with the condition and update function static arguments, it can be inlined, and strictness analysis can happen. >--------------------------------------------------------------- GHC/Base.lhs | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-) diff --git a/GHC/Base.lhs b/GHC/Base.lhs index 303d716..075f21d 100644 --- a/GHC/Base.lhs +++ b/GHC/Base.lhs @@ -571,8 +571,10 @@ f $ x = f x -- | @'until' p f@ yields the result of applying @f@ until @p@ holds. until :: (a -> Bool) -> (a -> a) -> a -> a -until p f x | p x = x - | otherwise = until p f (f x) +until p f = go + where + go x | p x = x + | otherwise = go (f x) -- | 'asTypeOf' is a type-restricted version of 'const'. It is usually -- used as an infix operator, and its typing forces its first argument _______________________________________________ Cvs-libraries mailing list [email protected] http://www.haskell.org/mailman/listinfo/cvs-libraries
