anchor.diff:  
       // All these should also always have default cases
       | (TCase(DecisionTreeTest.Const ConstNeedsDefaultCase, _) :: _), None ->
  -        error(InternalError("inexhaustive match - need a default cases!", m))
  +        error(InternalError("inexhaustive match - need a default case!", m))
   
       // Split string, float, uint64, int64, unativeint, nativeint matches into serial equality tests
       | TCase((DecisionTreeTest.ArrayLength _ | DecisionTreeTest.Const (Const.Single _ | Const.Double _ | Const.String _ | Const.Decimal _ | Const.Int64 _ | Const.UInt64 _ | Const.IntPtr _ | Const.UIntPtr _)), _) :: _, Some dflt ->
  
positive.code:                 | _ ->
                      [frontier]
  
              | _ -> failwith "pattern compilation: GenerateNewFrontiersAfterSucccessfulInvestigation"
          else [frontier]
  
      and BindProjectionPattern (Active(path, subExpr, p) as inp) ((accActive, accValMap) as s) =
  
negative.code:                  // Project a successful edge through the frontiers.
                   let investigation = Investigation(i', discrim, path)
  
                   let frontiers = frontiers |> List.collect (GenerateNewFrontiersAfterSuccessfulInvestigation inpExprOpt resPostBindOpt investigation)
                   let tree = InvestigateFrontiers refuted frontiers
                   // Bind the resVar for the union case, if we have one
                   let tree =
  