let imemo f =
  let m = Array.create 8 None in
  fun i ->
    let k = idx i in
    match m.(k) with
      | Some r -> r
      | None ->
          let r = f i in m.(k) <- Some r ; r