[Haskell-cafe] Re: Memoizing partially evaluated computations.

Chung-chieh Shan ccshan at post.harvard.edu
Wed Mar 18 08:21:05 EDT 2009

Sebastiaan Visser <sfvisser at cs.uu.nl> wrote in article <D86A7D11-F95F-4A27-A13C-2D78AFDA2E02 at cs.uu.nl> 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

Can you define smallIOfunc to be more polymorphic in the monad?  That
is, can you define a class of monads (MonadBehavior, let's call it)
that contains member functions for operations (such as print) you want
to perform in smallIOfunc, then write smallIOfunc to be polymorphic
over such a monad?  If so, you can then implement two instances of this
class: one for IO and one for a term representation of behavior.

Edit this signature at http://www.digitas.harvard.edu/cgi-bin/ken/sig
Who would have thought LISP would come back to life.
Steve Bourne, in an interview about Bourne Shell.

More information about the Haskell-Cafe mailing list