anchor.diff:          coalescedIds = new SortedDictionary<int, int>()
           nextId = 0
       }
  -    for item in traverse blocks do
  -        match item with
  -        | Left marker ->
  +    blocks
  +    |> convert
  +        (fun marker ->
               match marker with
               | PushIds ->
                   let copy = t.currentIds.ToDictionary((fun p -> p.Key), (fun p -> p.Value))
  
positive.code:             | ShiftRight binary
              | Subtract binary
              | Xor binary ->
                  binary.rightId <- getCurrentId t binary.right
                  match binary.right with
                  | Value _ ->
                      if not (typeExists t binary.left) then
  
negative.code:                     setType t binary.left type_
                  | _ -> ()
                  binary.leftId <- getCurrentId t binary.left
                  instr
              | Call unary ->
                  (getType t unary.operand) := Function
                  unary.operandId <- getCurrentId t unary.operand
                  instr
              | Return unary ->
                  if functionReturnsValue blocks then
                      unary.operandId <- getCurrentId t unary.operand
                  instr
              | Break
              | Branch _
              | Nop ->
                  instr
          )
      |> ignore
      let parameterTypes = new List<DataType>()
      for pair in t.parameterTypes.OrderBy(fun x -> x.Key) do
          parameterTypes.Add(pair.Value |> build)
  