Implement the simplest memoizer.
Implement the simplest memoizer.

I.e., the one with where the user passes the cache lookup and insert
functions.  This version may be kind of annoying to use, since the
cache manipulation functions will probably be defined in terms of some
dictionary in the state of a state monad, meaning a bit of boiler
plate.

ntc2/haskell-call-trace