You might want to watch out for multithreading issues, although in this case, I don't think it will cause sever problems, besides a couple of redundant cache updates.
On Thu, Sep 10, 2009 at 2:07 PM, Bulat Ziganshin <bulat.zigans...@gmail.com> wrote: > Hello staafmeister, > > Thursday, September 10, 2009, 3:54:34 PM, you wrote: > >> What do you think about such a function? This function is > > a bit of refactoring > > -- "global variable" in haskell way > cache = unsafePerformIO $ newIORef M.empty > > memo f x = unsafePerformIO$ do > m <- readIORef cache > case M.lookup x m of > Just y -> return y > Nothing -> do let res = f x > writeIORef cache $ M.insert x res m > return res > > memo2 = curry . memo . uncurry > > > -- > Best regards, > Bulat mailto:bulat.zigans...@gmail.com > > _______________________________________________ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe > _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe