anchor.diff:  
   let mutable variable_counter = 0
   
  +(* Generates a unique variable name *)
   let newVar (name: string): string = 
     variable_counter <- variable_counter + 1
     sprintf "%s%d" name variable_counter
   
  -
  +(* C code generation for a type *)
   let rec ccodegenType (t: System.Type): string = 
     if(t.IsArray) then
      "array_" + (ccodegenType (t.GetElementType()))
  
positive.code:   | Patterns.Value(v, tp) -> e
    | Patterns.Lambda (x, body) -> Expr.Lambda(x, cpreprocess body)
    | Patterns.NewArray(tp, elems) -> 
      let variable = new Var("x", tp.MakeArrayType())
      Expr.Let(variable, e, Expr.Var(variable))
    | Patterns.Call (x, op, elist) -> 
      Expr.Call(op, List.map cpreprocess elist)
  
negative.code:     | "op_Subtraction" -> Some("-")
      | _ -> None
  
  (* Pretty prints the given expression *)
  let rec prettyprint (e:Expr): string =
          match e with
          | Patterns.Lambda (x, body) -> sprintf "\%s. %s" (x.Name) (prettyprint body)
  