anchor.diff:  
                   override this.VisitParameter(expr : ParameterExpression) =
                       defaultArg (transformer expr) (expr :> _)
  -
  +                    
                   override this.VisitRuntimeVariables(expr : RuntimeVariablesExpression) =
                       let vars = expr.Variables |> Seq.map this.VisitParameter |> Seq.cast<ParameterExpression>
                       let e = expr.Update(vars)
                       defaultArg (transformer e) (e :> _)
   
  -                // cases
                   override this.VisitSwitch(expr : SwitchExpression) =
                       let value = this.Visit expr.SwitchValue
  -                    let cases = expr.Cases
  +                    let cases = expr.Cases |> Seq.map (fun sc -> ExpressionTransformer.VisitSwitchCaseWrapper(this, sc))
                       let defaultBody = this.Visit expr.DefaultBody
                       let e = expr.Update(value, cases, defaultBody)
                       defaultArg (transformer e) (e :> _)
   
                   override this.VisitSwitchCase(expr : SwitchCase) =
  -                    let tests = this.Visit expr.TestValues
  -                    let body = this.Visit expr.Body
  -                    expr.Update(tests, body)
  +                    ExpressionTransformer.VisitSwitchCaseWrapper(this, expr)
   
  -                // handlers
                   override this.VisitTry(expr : TryExpression) =
                       let body = this.Visit expr.Body
  -                    let handlers = expr.Handlers            
  +                    let handlers = expr.Handlers |> Seq.map (fun handler -> ExpressionTransformer.VisitCatchBlockWrapper(this, handler))          
                       let finallyExpr = this.Visit expr.Finally
                       let fault = this.Visit expr.Fault
                       let e = expr.Update(body, handlers, finallyExpr, fault)
  
positive.code:                     let e = expr.Update(expr')
                      defaultArg (transformer e) (e :> _)
  
                  // transform
                  override this.VisitMemberAssignment(expr : MemberAssignment) =
                      let expr' = this.Visit expr.Expression
                      let e = expr.Update(expr') 
                      e
  
                  override this.VisitMemberBinding(expr : MemberBinding) =
                      expr
  
                  override this.VisitMemberInit(expr : MemberInitExpression) =
                      let newExpr = this.Visit expr.NewExpression :?> NewExpression
                      let e = expr.Update(newExpr, expr.Bindings)
                      defaultArg (transformer e) (e :> _)
  
                  override this.VisitMemberListBinding(expr : MemberListBinding) =
                      expr
  
                  override this.VisitMemberMemberBinding(expr : MemberMemberBinding) =
                      expr
  
                  override this.VisitMethodCall(expr : MethodCallExpression) =
                      let o = this.Visit expr.Object
  
negative.code:                     failwith "Not implemented"
  
                  override this.VisitElementInit(expr : ElementInit) =
                      ExpressionTransformer.VisitElementInitWrapper(this, expr)
  
                  override this.VisitExtension(expr : Expression) =
                      defaultArg (transformer expr) expr
  
                  override this.VisitGoto(expr : GotoExpression) =
                      let value = this.Visit expr.Value
                      let e = expr.Update(expr.Target, value)
                      defaultArg (transformer e) (e :> _)
  
                  override this.VisitIndex(expr : IndexExpression) =
  