[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