[GHC] #1904: Strictness analyser should be smarter
GHC
cvs-ghc at haskell.org
Mon Jan 28 16:41:20 CET 2013
#1904: Strictness analyser should be smarter
-------------------------------+--------------------------------------------
Reporter: igloo | Owner:
Type: bug | Status: closed
Priority: normal | Milestone: _|_
Component: Compiler | Version: 6.8.1
Resolution: fixed | Keywords:
Os: Unknown/Multiple | Architecture: Unknown/Multiple
Failure: None/Unknown | Difficulty: Unknown
Testcase: | Blockedby:
Blocking: | Related:
-------------------------------+--------------------------------------------
Changes (by simonpj):
* status: new => closed
* resolution: => fixed
Comment:
The code now looks good. Here is Case A, with `-ddump-simpl -O` output:
{{{
foo :: String -> [String] -> Bool
foo x _ | x `seq` x == "." = True
foo x xs = x `seq` any (x ==) xs
=====
T1904.foo =
\ (x_aeG :: GHC.Base.String) (ds_dl8 :: [GHC.Base.String]) ->
case x_aeG of x1_XeK { __DEFAULT ->
case GHC.Base.eqString x1_XeK T1904.foo1 of _ {
GHC.Types.False ->
GHC.List.any @ GHC.Base.String (GHC.Base.eqString x1_XeK) ds_dl8;
GHC.Types.True -> GHC.Types.True
} }
}}}
Now without the first `seq`, Case B:
{{{
foo :: String -> [String] -> Bool
foo x _ | x == "." = True
foo x xs = x `seq` any (x ==) xs
====
T1904.foo =
\ (x_aeG :: GHC.Base.String) (ds_dl7 :: [GHC.Base.String]) ->
case GHC.Base.eqString x_aeG T1904.foo1 of _ {
GHC.Types.False ->
case x_aeG of x1_akh { __DEFAULT ->
GHC.List.any @ GHC.Base.String (GHC.Base.eqString x1_akh) ds_dl7
};
GHC.Types.True -> GHC.Types.True
}
}}}
Notice that both have one remaining `seq` on `x`, but in one case it's
before the call to `eqString`, and in the other case after it, which is as
it should be.
So I'm happy here, and am closing. Re-open if you disagree.
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/1904#comment:6>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list