anchor.diff:  
       let getReverseType (revType:string) : PrimitiveType =
           match revType with
  -        | "i32" -> SimplePrimitive Int
  +        | "i64" -> SimplePrimitive Int
   
       let getReceiveID (msgGenType:string) (actorName:string) : State<int, Environment> =
           state {
  
positive.code:                     sprintf "or %s %s, %s" sLhsType sLhsName sRhsName, sLhsType
                    | And, "i1" -> 
                      sprintf "and %s %s, %s" sLhsType sLhsName sRhsName, sLhsType
                    | GreaterThan, "i1" | GreaterThanOrEq, "i1" | LessThan, "i1" | LessThanOrEq, "i1" | Equals, "i1" | NotEquals, "i1" -> 
                      (icmpString op sLhsType sLhsName sRhsName, sLhsType)
                    | _,_ as err -> failwith (sprintf "%A not matched" err)
                let! (resName, resType, resCode) = newRegister tempReg targetType code
                let fullString = sprintf "%s\n%s\n%s\n" lhsCode rhsCode resCode
  
negative.code:           }
          | BinOperation (lhs, op, rhs) -> 
            state {
                let! (sLhsName, sLhsType, lhsCode) = internalCodeGen lhs
                let! (sRhsName, sRhsType, rhsCode) = internalCodeGen rhs
                let! tempReg = freshReg
                let (code, targetType) = 
                    match op, sLhsType with
                    | Multiply, "i64" -> 
                      sprintf "mul %s %s, %s" sLhsType sLhsName sRhsName, sLhsType
                    | Multiply, "double" -> 
                      sprintf "fmul %s %s, %s" sLhsType sLhsName sRhsName, sLhsType
                    | Modulo, "i64" -> 
                      sprintf "srem %s %s, %s" sLhsType sLhsName sRhsName, sLhsType
                    | Modulo, "double" -> 
                      sprintf "frem %s %s, %s" sLhsType sLhsName sRhsName, sLhsType
                    | Plus, "i64" ->
                      sprintf "add %s %s, %s" sLhsType sLhsName sRhsName, sLhsType
                    | Plus, "double" ->
                      sprintf "fadd %s %s, %s" sLhsType sLhsName sRhsName, sLhsType
                    | Minus, "i64" ->
                      sprintf "sub %s %s, %s" sLhsType sLhsName sRhsName, sLhsType
                    | Minus, "double" ->
                      sprintf "fsub %s %s, %s" sLhsType sLhsName sRhsName, sLhsType
                    | Divide, "i64" ->
                      sprintf "sdiv %s %s, %s" sLhsType sLhsName sRhsName, sLhsType
                    | Divide, "double" ->
                      sprintf "fdiv %s %s, %s" sLhsType sLhsName sRhsName, sLhsType
  