anchor.diff:  exception EnumMatchIncomplete of bool * (string * bool) option * range
   
   type ActionOnFailure = 
  -  | ThrowIncompleteMatchException 
  -  | IgnoreWithWarning 
  -  | Throw 
  -  | Rethrow 
  -  | FailFilter
  +    | ThrowIncompleteMatchException 
  +    | IgnoreWithWarning 
  +    | Throw 
  +    | Rethrow 
  +    | FailFilter
   
   [<NoEquality; NoComparison>]
   /// Represents type-checked patterns
   type Pattern =
  -  | TPat_const of Const * range
  -  | TPat_wild of range  (* note = TPat_disjs([],m), but we haven't yet removed that duplication *)
  -  | TPat_as of  Pattern * PatternValBinding * range (* note: can be replaced by TPat_var, i.e. equals TPat_conjs([TPat_var; pat]) *)
  -  | TPat_disjs of  Pattern list * range
  -  | TPat_conjs of  Pattern list * range
  -  | TPat_query of (Expr * TType list * (ValRef * TypeInst) option * int * ActivePatternInfo) * Pattern * range
  -  | TPat_unioncase of UnionCaseRef * TypeInst * Pattern list * range
  -  | TPat_exnconstr of TyconRef * Pattern list * range
  -  | TPat_tuple of  TupInfo * Pattern list * TType list * range
  -  | TPat_array of  Pattern list * TType * range
  -  | TPat_recd of TyconRef * TypeInst * Pattern list * range
  -  | TPat_range of char * char * range
  -  | TPat_null of range
  -  | TPat_isinst of TType * TType * PatternValBinding option * range
  -  member this.Range =
  -    match this with
  -    |   TPat_const(_,m) -> m
  -    |   TPat_wild m -> m
  -    |   TPat_as(_,_,m) -> m
  -    |   TPat_disjs(_,m) -> m
  -    |   TPat_conjs(_,m) -> m
  -    |   TPat_query(_,_,m) -> m
  -    |   TPat_unioncase(_,_,_,m) -> m
  -    |   TPat_exnconstr(_,_,m) -> m
  -    |   TPat_tuple(_,_,_,m) -> m
  -    |   TPat_array(_,_,m) -> m
  -    |   TPat_recd(_,_,_,m) -> m
  -    |   TPat_range(_,_,m) -> m
  -    |   TPat_null(m) -> m
  -    |   TPat_isinst(_,_,_,m) -> m
  +    | TPat_const of Const * range
  +    | TPat_wild of range  (* note = TPat_disjs([],m), but we haven't yet removed that duplication *)
  +    | TPat_as of  Pattern * PatternValBinding * range (* note: can be replaced by TPat_var, i.e. equals TPat_conjs([TPat_var; pat]) *)
  +    | TPat_disjs of  Pattern list * range
  +    | TPat_conjs of  Pattern list * range
  +    | TPat_query of (Expr * TType list * (ValRef * TypeInst) option * int * ActivePatternInfo) * Pattern * range
  +    | TPat_unioncase of UnionCaseRef * TypeInst * Pattern list * range
  +    | TPat_exnconstr of TyconRef * Pattern list * range
  +    | TPat_tuple of  TupInfo * Pattern list * TType list * range
  +    | TPat_array of  Pattern list * TType * range
  +    | TPat_recd of TyconRef * TypeInst * Pattern list * range
  +    | TPat_range of char * char * range
  +    | TPat_null of range
  +    | TPat_isinst of TType * TType * PatternValBinding option * range
  +    member this.Range =
  +        match this with
  +        |   TPat_const(_,m) -> m
  +        |   TPat_wild m -> m
  +        |   TPat_as(_,_,m) -> m
  +        |   TPat_disjs(_,m) -> m
  +        |   TPat_conjs(_,m) -> m
  +        |   TPat_query(_,_,m) -> m
  +        |   TPat_unioncase(_,_,_,m) -> m
  +        |   TPat_exnconstr(_,_,m) -> m
  +        |   TPat_tuple(_,_,_,m) -> m
  +        |   TPat_array(_,_,m) -> m
  +        |   TPat_recd(_,_,_,m) -> m
  +        |   TPat_range(_,_,m) -> m
  +        |   TPat_null(m) -> m
  +        |   TPat_isinst(_,_,_,m) -> m
   
   and PatternValBinding = PBind of Val * TypeScheme
   
  
positive.code:         match path with 
          | PathQuery _ -> raise CannotRefute
          | PathConj (p,_j) -> 
               go p tm
          | PathTuple (p,tys,j) -> 
               let k, eCoversVals = mkOneKnown tm j tys
               go p (fun _ -> mkRefTupled g m k tys, eCoversVals)
          | PathRecd (p,tcref,tinst,j) -> 
               let flds, eCoversVals = tcref |> actualTysOfInstanceRecdFields (mkTyconRefInst tcref tinst) |> mkOneKnown tm j
               go p (fun _ -> Expr.Op(TOp.Recd(RecdExpr, tcref),tinst, flds,m), eCoversVals)
  
          | PathUnionConstr (p,ucref,tinst,j) -> 
               let flds, eCoversVals = ucref |> actualTysOfUnionCaseFields (mkTyconRefInst ucref.TyconRef tinst)|> mkOneKnown tm j
               go p (fun _ -> Expr.Op(TOp.UnionCase(ucref),tinst, flds,m), eCoversVals)
  
          | PathArray (p,ty,len,n) -> 
               let flds, eCoversVals = mkOneKnown tm n (List.replicate len ty)
               go p (fun _ -> Expr.Op(TOp.Array,[ty], flds ,m), eCoversVals)
  
          | PathExnConstr (p,ecref,n) -> 
               let flds, eCoversVals = ecref |> recdFieldTysOfExnDefRef |> mkOneKnown tm n
               go p (fun _ -> Expr.Op(TOp.ExnConstr(ecref),[], flds,m), eCoversVals)
  
          | PathEmpty(ty) -> tm ty
          
  
negative.code:             let tyargs = 
                  let someSolved = ref false
                  let freezeVar gtp = 
                      if isBeingGeneralized gtp tyscheme then 
                          mkTyparTy gtp 
                      else 
                          someSolved := true
                          TypeRelations.ChooseTyparSolution g amap gtp
  
                  let solutions = List.map freezeVar gtps
                  if !someSolved then 
  