| > Anyway, as I am still wondering why ghc creates different code for
| >   returnP a = return a
| >   returnP = return
| >
|
| Ah, now I rember this coming up before.
|
| Simon, is this a CAF issue? Or did it trigger the -fno-state-hack case?

I'm not sure.  A small example would be good.

| I've definitely run into the odd other case where point-freeing
| a bit of code messes with the complexity.

That should not happen -- except for the state-hack. Which is this:

Consider
        f1 :: Char -> IO ()
        f1 = \c. let i = ord c in \s. print i s

Here s::State World.  Is this equivalent to
        f2 = \c.\s. print (ord c) s

The latter is very much more efficient than 'f1', because it doesn't build an 
intermediate lambda.  This matters a lot in I/O-intensive programs.   But if 
'f' is called thus:

        forever (f 'w')

then (ord 'w') is computed once for each call of f2, but is shared among all 
calls to f1.  And that can make a big difference too.


I have no idea whether this is playing a role in the example you are discussing 
-- my guess is not, and there may be another performance bug lurking. So 
eliciting a small demo would be great.

Simon

_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to