memoize boilerplate