@Override
    public TypeEvalContext fun(final TypeEvalContext param) {
      // key and value are both context here. If no context stored, then key is stored. Old one is returned otherwise to cache.
      return param;
    }
@Override
    public TypeEvalContext fun(final TypeEvalContext param)