static <T> Adapter<T, Difference> wrap(T value) {
    return wrap(value, Objects::equals, Objects::hashCode, (past, now) -> () -> Objects.equals(past, now));
  }
static <T> Adapter<T, Difference> wrap(T value)