export function memoize(fn: (a: A) => B, cacheResultAsKey = false, cache: WeakMap = new WeakMap()): (a: A) => B { return function(arg) { if (arg == null) { return fn(arg); } // try { let result = cache.get(arg); if (result === undefined) { cache.set(arg, result = fn(arg)); if (cacheResultAsKey) { cache.set(result as any as A, result); } } return result; // } // catch(e) { // console.log("Error: " + arg); // throw e; // } } }