anchor.diff:  let choosei (chooser : int -> 'T -> 'U option) list : 'U list =
       // Preconditions
       checkNonNull "list" list
  -    
  +
       let chooser = FSharpFunc<_,_,_>.Adapt chooser
   
       let rec choosei chosen index list =
  
positive.code:     // Return the result list.
      result
  
  /// <summary>Returns a new list created by keeping only those elements that are not in the second list.  In the result of 'List.difference list1 list2', the first occurrence of each element of 'list2' in turn (if any) has been removed from 'list1'.</summary>
  /// <param name="list1"></param>
  /// <param name="list2"></param>
  /// <returns></returns>
  [<CompiledName("Difference")>]
  let difference (list1 : 'T list) (list2 : 'T list) : 'T list =
      // Check pre-conditions
      checkNonNull "list1" list1
      checkNonNull "list2" list2
  
      // Define helper to remove the first instance of an element 
      let removeFirst pred list =
          let rec loop acc =
              function
  
negative.code:         // so we benefit from memory locality.
          let reversed = revIntoArray list
          let mutable state = state
  
          let len = Array.length reversed
          for i = 1 to len - 1 do
              state <- folder.Invoke (reversed.[i - 1], reversed.[i], state)
  