re-implement Case<T>