anchor.diff:          | Some v -> Choice1Of2 v
           | _ -> Choice2Of2 other
   
  +    /// Converts the option to a list of length 0 or 1
       [<Extension>]
       static member ToFSharpList o = Option.toList o
   
  +    /// Converts the option to an array of length 0 or 1
       [<Extension>]
       static member ToArray o = Option.toArray o
   
  -    // LINQ
  +    /// Transforms an option value by using a specified mapping function
       [<Extension>]
       static member Select (o, f: Func<_,_>) = Option.map f.Invoke o
   
  +    /// Invokes a function on an optional value that itself yields an option
       [<Extension>]
       static member SelectMany (o, f: Func<_,_>) = Option.bind f.Invoke o
   
  +    /// Invokes a function on an optional value that itself yields an option,
  +    /// and then applies a mapping function
       [<Extension>]
       static member SelectMany (o, f: Func<_,_>, mapper: Func<_,_,_>) =
         let mapper = Option.lift2 (curry mapper.Invoke)
         let v = Option.bind f.Invoke o
         mapper o v
   
  +    /// <summary>
  +    /// Evaluates the equivalent of <see cref="System.Linq.Enumerable.Aggregate"/> for an option
  +    /// </summary>
       [<Extension>]
       static member Aggregate (o, state, f: Func<_,_,_>) =
           Option.fold (curry f.Invoke) state o
   
  +    /// Applies a predicate to the option. If the predicate returns true, returns Some x, otherwise None.
       [<Extension>]
       static member Where (o: _ option, pred: _ Predicate) =
         Option.filter pred.Invoke o
  
positive.code: [<Extension>]
  type FSharpChoice =
  
      [<Extension>]
      static member Value (c: Choice<_,_>) = Choice.get c
  
      static member Cast (o: obj) = Choice.cast o
  
      [<Extension>]
  
negative.code:         | Some v -> f.Invoke v
          | _ -> ()
  
      /// Gets the option if Some x, otherwise the supplied default value.
      [<Extension>]
      static member OrElse (o, other) =
          match o with
  