anchor.diff:    @override Option bind(Option f(A a)) => flatMap(f);
   
     @override traverse(Applicative gApplicative, f(A a)) => fold(() => gApplicative.pure(none), (a) => gApplicative.map(f(a), some));
  +
  +  @override Option<A> empty() => none;
  +
  +  @override Option<A> plus(Option<A> o2) => orElse(o2);
   
     Either<dynamic, A> operator %(ifNone) => fold(() => left(ifNone), right);
     A operator |(A dflt) => fold(() => dflt, (a) => a);
  
positive.code: Option some(a) => new Some(a);
  Option option(test, value) => test ? some(value) : none;
  
  final Monad<Option> OptionM = new MonadOpsMonad<Option>(some);
  final Applicative<Option> OptionA = OptionM;
  final Functor<Option> OptionF = OptionM;
  final Traversable<Option> OptionTr = new TraversableOpsTraversable<Option>();
  
negative.code: part of dartz;
  
  abstract class Option<A> extends TraversableOps<Option, A> with MonadOps<Option, A>, MonadPlusOps<Option, A> {
    fold(ifNone(), ifSome(A a));
    Option map(f(A a)) => fold(() => none, (A a) => some(f(a)));
    Option flatMap(Option f(A a)) => fold(() => none, (A a) => f(a));
  