On 2009-03-18T21:24:58-0600, Luke Palmer wrote:
> On Wed, Mar 18, 2009 at 6:21 AM, Chung-chieh Shan
> <ccs...@post.harvard.edu>wrote:
> >    computation = [
> >        smallIOfunc x0
> >      , smallIOfunc x1
> >      , smallIOfunc x2
> >      , smallIOfunc x3
> >       ]
> >      where smallIOfunc a = print a >> return a
> >             x0 = timeConsumingPureOperation0
> >            x1 = timeConsumingPureOperation1
> >            x2 = timeConsumingPureOperation2
> >            x3 = timeConsumingPureOperation3
> 
> Um, just to clarify, this code is exactly equivalent to the original,
> including sharing behavior.  The only time a let (or where) clause changes
> sharing is if the variable is used more than once in the body.

Ah, good point!  Of course, "timeConsumingPureOperation0" above is a
metavariable for a Haskell expression, not just a Haskell variable.  But
I guess I also took "smallIOfunc" to be a metavariable for a Haskell
context (i.e., a Haskell expression with a hole), not just a Haskell
function name.

You make an important point that sharing is changed only if the variable
(such as x0) is used more than once in the body.  Let me note that the
definition of "computation" doesn't have to mention "x0" multiple times
syntactically for x0 to be used more than once.  It's enough for "x0" to
appear once under a lambda.  Here's a concrete example:

    main :: IO ()
    main = once >> once

    once :: IO ()
    once = do
        putStrLn "foo"
        putStrLn (unsafePerformIO (putStrLn "hello") `seq` "world")

If I put "() <-" in front of the second-to-last line, then "hello"
appears twice, not once, in the output.

-- 
Edit this signature at http://www.digitas.harvard.edu/cgi-bin/ken/sig
100 Days to close Guantanamo and end torture http://100dayscampaign.org/
http://www.avaaz.org/en/end_the_war_on_terror/

Attachment: signature.asc
Description: Digital signature

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to