anchor.diff:                      failwith "Not implemented"
   
                   override this.VisitElementInit(expr : ElementInit) =
  -                    expr
  +                    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 = Expression.MakeGoto(expr.Kind, expr.Target, value, expr.Type)
  +                    let e = expr.Update(expr.Target, value)
                       defaultArg (transformer e) (e :> _)
   
                   override this.VisitIndex(expr : IndexExpression) =
  
positive.code:                     let e = Expression.Block(exprs')
                      defaultArg (transformer e) (e :> _)
  
                  // transform
                  override this.VisitCatchBlock(expr : CatchBlock) =
                      let var    = this.Visit expr.Variable :?> ParameterExpression
                      let body   = this.Visit expr.Body
                      let filter = this.Visit expr.Filter
                      Expression.MakeCatchBlock(expr.Test, var, body, filter)
  
                  override this.VisitConditional(expr : ConditionalExpression) =
                      let ifTrue = this.Visit expr.IfTrue
  
negative.code:                     let e = expr.Update(expr')
                      defaultArg (transformer e) (e :> _)
  
                  static member private VisitElementInitWrapper(visitor : ExpressionVisitor, expr : ElementInit) =
                      let args = visitor.Visit(expr.Arguments)
                      expr.Update(args)
  
                  static member private VisitMemberBindingWrapper(visitor : ExpressionVisitor, expr : MemberBinding) =
                      expr
  
                  static member private VisitSwitchCaseWrapper(visitor : ExpressionVisitor, expr : SwitchCase) =
                      let tests = visitor.Visit expr.TestValues
                      let body  = visitor.Visit expr.Body
                      expr.Update(tests, body)
  
                  static member private VisitCatchBlockWrapper(visitor : ExpressionVisitor, expr : CatchBlock) =
                      let var    = visitor.Visit expr.Variable :?> ParameterExpression
                      let body   = visitor.Visit expr.Body
                      let filter = visitor.Visit expr.Filter
                      expr.Update(var, filter, body)
  
          let transform (transformer : Expression -> Expression option) =
              let t = new ExpressionTransformer(transformer)
  