///|
pub fn[V] memorized_0(f : () -> V) -> () -> V {
  Lazy::memo(f).inner()
}

///|
pub fn[K, V] memorized_ignore_arg(f : (K) -> V) -> (K) -> V {
  Reader::memo_ignore_arg(f).inner()
}

///|
pub fn[K : Hash + Eq, V] memorized(f : (K) -> V) -> (K) -> V {
  Reader::memo(f).inner()
}

///|
test "memorized_0" {
  let f = () => [["1"]]
  let memoized = memorized_0(f)
  assert_true(physical_equal(memoized(), memoized()))
  assert_eq(memoized(), [["1"]])
}