[Haskell-cafe] memoization
Peter Verswyvelen
bugfact at gmail.com
Thu Sep 10 08:34:38 EDT 2009
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.ziganshin at 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.Ziganshin at gmail.com
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
More information about the Haskell-Cafe
mailing list