anchor.diff:  
           obj :?> 'Member
   
  -    let projectExpr<'Record, 'Member> (path : MemberInfo[]) (expr : Expr<'Record>) =
  -        let rec aux expr (m:MemberInfo) =
  -            match m with
  -            | :? FieldInfo as fI -> Expr.FieldGet(expr, fI)
  -            | :? PropertyInfo as pI -> Expr.PropertyGet(expr, pI)
  -            | _ -> invalidMember m
  -
  -        Expr.Cast<'Member>(Array.fold aux (expr :> _) path) 
  -
       let inline inject<'Record, 'Member> (isStructMember : bool) (path : MemberInfo[]) 
                                           (r : 'Record) (value : 'Member) =
           let mutable obj = box r
  
positive.code:         if notFound then raise <| KeyNotFoundException(sprintf "Union case: %A" caseName)
          i
  
      member __.GetTagExpr (union : Expr<'U>) : Expr<int> =
          let expr =
              match tagReaderInfo with
  
negative.code: 
              setValue obj path.[n - 1] value
              r
  
  #if TYPESHAPE_NO_EXPR
  #else
      let projectExpr<'Record, 'Member> (path : MemberInfo[]) (expr : Expr<'Record>) =
          let rec aux expr (m:MemberInfo) =
              match m with
              | :? FieldInfo as fI -> Expr.FieldGet(expr, fI)
              | :? PropertyInfo as pI -> Expr.PropertyGet(expr, pI)
              | _ -> invalidMember m
  
          Expr.Cast<'Member>(Array.fold aux (expr :> _) path) 
  
      let injectExpr (path : MemberInfo[]) 
                      (r : Expr<'TRecord>) 
  