CAT memoized, untested