package core // Memoize wraps a pure function fn so that results are cached by key. // Subsequent calls with the same key return the cached value without calling fn again. // The returned function is safe for single-goroutine use. func Memoize[K comparable, V any](fn func(K) V) func(K) V { cache := make(map[K]V) return func(key K) V { if val, ok := cache[key]; ok { return val } val := fn(key) cache[key] = val return val } }