diff options
author | simonpj <unknown> | 2002-06-18 13:58:23 +0000 |
---|---|---|
committer | simonpj <unknown> | 2002-06-18 13:58:23 +0000 |
commit | 301802f9d41a8a67ba5c98e5422460525628af21 (patch) | |
tree | 02ad30b6e3bbe03a57c5ee770f71f3c991e73bac /libraries/base/GHC/Base.lhs | |
parent | 23e923d5dd8fc2463d13d9f1201dab05e10f1b7f (diff) | |
download | haskell-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.lhs | 8 |
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 |