On Wed, Mar 18, 2009 at 6:21 AM, Chung-chieh Shan
<[email protected]>wrote:

> Sebastiaan Visser <[email protected]> wrote in article <
> [email protected]> in
> gmane.comp.lang.haskell.cafe:
> > Suppose I have a list of IO computations that depends on a few very
> > time consuming pure operations. The pure operations are not dependent
> > on the real world:
> >
> >  >  computation :: [IO Int]
> >  >  computation = [
> >  >      smallIOfunc timeConsumingPureOperation0
> >  >    , smallIOfunc timeConsumingPureOperation1
> >  >    , smallIOfunc timeConsumingPureOperation2
> >  >    , smallIOfunc timeConsumingPureOperation3
> >  >    ]
> >  >    where smallIOfunc a = print a >> return a
>
> I take it that, because you "do not really have the control to change
> things `deep' inside the code", it is not an option to redefine
>
>    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.

Luke
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to