Is there an object-identity-based, thread-safe memoization library somewhere?

前端 未结 3 1473
隐瞒了意图╮
隐瞒了意图╮ 2021-02-07 15:11

I know that memoization seems to be a perennial topic here on the haskell tag on stack overflow, but I think this question has not been asked before.

I\'m aware

3条回答
  •  隐瞒了意图╮
    2021-02-07 15:36

    It seems that stable-memo would be just what you needed (although I'm not sure if it can handle multiple threads):

    Whereas most memo combinators memoize based on equality, stable-memo does it based on whether the exact same argument has been passed to the function before (that is, is the same argument in memory).

    • stable-memo only evaluates keys to WHNF.

    • This can be more suitable for recursive functions over graphs with cycles.

    • stable-memo doesn't retain the keys it has seen so far, which allows them to be garbage collected if they will no longer be used. Finalizers are put in place to remove the corresponding entries from the memo table if this happens.

    • Data.StableMemo.Weak provides an alternative set of combinators that also avoid retaining the results of the function, only reusing results if they have not yet been garbage collected.

    • There is no type class constraint on the function's argument.

    stable-memo will not work for arguments which happen to have the same value but are not the same heap object. This rules out many candidates for memoization, such as the most common example, the naive Fibonacci implementation whose domain is machine Ints; it can still be made to work for some domains, though, such as the lazy naturals.

提交回复
热议问题