summaryrefslogtreecommitdiff
path: root/libraries/base/GHC/Base.lhs
diff options
context:
space:
mode:
authorsimonpj <unknown>2002-06-18 13:58:23 +0000
committersimonpj <unknown>2002-06-18 13:58:23 +0000
commit301802f9d41a8a67ba5c98e5422460525628af21 (patch)
tree02ad30b6e3bbe03a57c5ee770f71f3c991e73bac /libraries/base/GHC/Base.lhs
parent23e923d5dd8fc2463d13d9f1201dab05e10f1b7f (diff)
downloadhaskell-301802f9d41a8a67ba5c98e5422460525628af21.tar.gz
[project @ 2002-06-18 13:58:22 by simonpj]
--------------------------------------- Rehash the handling of SeqOp --------------------------------------- See the comments in the commentary (Cunning Prelude Code). * Expunge SeqOp altogether * Add GHC.Base.lazy :: a -> a to GHC.Base * Add GHC.Base.lazy to basicTypes/MkId. The idea is that this defn will over-ride the info from GHC.Base.hi, thereby hiding strictness and unfolding * Make stranal/WorkWrap do a "manual inlining" for GHC.Base.lazy This happens nicely after the strictness analyser has run. * Expunge the SeqOp/ParOp magic in CorePrep * Expunge the RULE for seq in PrelRules * Change the defns of pseq/par in GHC.Conc to: {-# INLINE pseq #-} pseq :: a -> b -> b pseq x y = x `seq` lazy y {-# INLINE par #-} par :: a -> b -> b par x y = case (par# x) of { _ -> lazy y }
Diffstat (limited to 'libraries/base/GHC/Base.lhs')
-rw-r--r--libraries/base/GHC/Base.lhs8
1 files changed, 8 insertions, 0 deletions
diff --git a/libraries/base/GHC/Base.lhs b/libraries/base/GHC/Base.lhs
index 45138d2c19..8abd593b99 100644
--- a/libraries/base/GHC/Base.lhs
+++ b/libraries/base/GHC/Base.lhs
@@ -564,6 +564,14 @@ compareInt# x# y#
id :: a -> a
id x = x
+-- lazy function; this is just the same as id, but its unfolding
+-- and strictness are over-ridden by the definition in MkId.lhs
+-- That way, it does not get inlined, and the strictness analyser
+-- sees it as lazy. Then the worker/wrapper phase inlines it.
+-- Result: happiness
+lazy :: a -> a
+lazy x = x
+
-- constant function
const :: a -> b -> a
const x _ = x