public static <A> Equal<Option<A>> optionEqual(final Equal<A> ea) {
    return equal(o1 -> o2 -> o1.isNone() && o2.isNone() ||
           o1.isSome() && o2.isSome() && ea.f.f(o1.some()).f(o2.some()));
  }