S map(T t) {
      if (reverse == null) reverse = new WeakHashMap<>();
      S s = mapInner.fun(t);
      if (s != null && t != null) {
        reverse.put(s, t);
      }
      return s;
    }
S map(T t)