anchor.diff:  
       dict.Add(Expr.getMethodInfo <@ char 'a' @>, doNothing)
   
  -    dict.Add(Expr.getMethodInfo <@ byte 1I @>, emitCallMethod (Expr.getMethodInfo <@ Numerics.BigInteger.op_Explicit(1I) : byte @>))
  -    dict.Add(Expr.getMethodInfo <@ uint8 1I @>, emitCallMethod (Expr.getMethodInfo <@ Numerics.BigInteger.op_Explicit(1I) : byte @>))
  -    dict.Add(Expr.getMethodInfo <@ sbyte 1I @>, emitCallMethod (Expr.getMethodInfo <@ Numerics.BigInteger.op_Explicit(1I) : sbyte @>))
  -    dict.Add(Expr.getMethodInfo <@ int8 1I @>, emitCallMethod (Expr.getMethodInfo <@ Numerics.BigInteger.op_Explicit(1I) : sbyte @>))
  -    dict.Add(Expr.getMethodInfo <@ decimal 1I @>, emitCallMethod (Expr.getMethodInfo <@ Numerics.BigInteger.op_Explicit(1I) : decimal @>))
  -    dict.Add(Expr.getMethodInfo <@ float 1I @>, emitCallMethod (Expr.getMethodInfo <@ Numerics.BigInteger.op_Explicit(1I) : float @>))
  -    dict.Add(Expr.getMethodInfo <@ double 1I @>, emitCallMethod (Expr.getMethodInfo <@ Numerics.BigInteger.op_Explicit(1I) : double @>))
  -    dict.Add(Expr.getMethodInfo <@ float32 1I @>, emitCallMethod (Expr.getMethodInfo <@ Numerics.BigInteger.op_Explicit(1I) : float32 @>))
  -    dict.Add(Expr.getMethodInfo <@ single 1I @>, emitCallMethod (Expr.getMethodInfo <@ Numerics.BigInteger.op_Explicit(1I) : float32 @>))
  -    dict.Add(Expr.getMethodInfo <@ int 1I @>, emitCallMethod (Expr.getMethodInfo <@ Numerics.BigInteger.op_Explicit(1I) : int @>))
  -    dict.Add(Expr.getMethodInfo <@ int16 1I @>, emitCallMethod (Expr.getMethodInfo <@ Numerics.BigInteger.op_Explicit(1I) : int16 @>))
  -    dict.Add(Expr.getMethodInfo <@ uint16 1I @>, emitCallMethod (Expr.getMethodInfo <@ Numerics.BigInteger.op_Explicit(1I) : uint16 @>))
  -    dict.Add(Expr.getMethodInfo <@ int32 1I @>, emitCallMethod (Expr.getMethodInfo <@ Numerics.BigInteger.op_Explicit(1I) : int32 @>))
  -    dict.Add(Expr.getMethodInfo <@ uint32 1I @>, emitCallMethod (Expr.getMethodInfo <@ Numerics.BigInteger.op_Explicit(1I) : uint32 @>))
  -    dict.Add(Expr.getMethodInfo <@ int64 1I @>, emitCallMethod (Expr.getMethodInfo <@ Numerics.BigInteger.op_Explicit(1I) : int64 @>))
  -    dict.Add(Expr.getMethodInfo <@ uint64 1I @>, emitCallMethod (Expr.getMethodInfo <@ Numerics.BigInteger.op_Explicit(1I) : uint64 @>))
  -
  -    dict.Add(Expr.getMethodInfo <@ byte 1.0M @>, emitCallMethod (Expr.getMethodInfo <@ Decimal.op_Explicit(1.0M) : byte @>))
  -    dict.Add(Expr.getMethodInfo <@ uint8 1.0M @>, emitCallMethod (Expr.getMethodInfo <@ Decimal.op_Explicit(1.0M) : byte @>))
  -    dict.Add(Expr.getMethodInfo <@ sbyte 1.0M @>, emitCallMethod (Expr.getMethodInfo <@ Decimal.op_Explicit(1.0M) : sbyte @>))
  -    dict.Add(Expr.getMethodInfo <@ int8 1.0M @>, emitCallMethod (Expr.getMethodInfo <@ Decimal.op_Explicit(1.0M) : sbyte @>))
  -    dict.Add(Expr.getMethodInfo <@ char 1.0M @>, emitCallMethod (Expr.getMethodInfo <@ Decimal.op_Explicit(1.0M) : char @>))
       dict.Add(Expr.getMethodInfo <@ decimal 1.0M @>, doNothing)
  -    dict.Add(Expr.getMethodInfo <@ float 1.0M @>, emitCallMethod (Expr.getMethodInfo <@ Convert.ToDouble(1M) @>))
  -    dict.Add(Expr.getMethodInfo <@ double 1.0M @>, emitCallMethod (Expr.getMethodInfo <@ Convert.ToDouble(1M) @>))
  -    dict.Add(Expr.getMethodInfo <@ float32 1.0M @>, emitCallMethod (Expr.getMethodInfo <@ Decimal.op_Explicit(1.0M) : float32 @>))
  -    dict.Add(Expr.getMethodInfo <@ single 1.0M @>, emitCallMethod (Expr.getMethodInfo <@ Decimal.op_Explicit(1.0M) : float32 @>))
  -    dict.Add(Expr.getMethodInfo <@ int 1.0M @>, emitCallMethod (Expr.getMethodInfo <@ Decimal.op_Explicit(1.0M) : int @>))
  -    dict.Add(Expr.getMethodInfo <@ int16 1.0M @>, emitCallMethod (Expr.getMethodInfo <@ Decimal.op_Explicit(1.0M) : int16 @>))
  -    dict.Add(Expr.getMethodInfo <@ uint16 1.0M @>, emitCallMethod (Expr.getMethodInfo <@ Decimal.op_Explicit(1.0M) : uint16 @>))
  -    dict.Add(Expr.getMethodInfo <@ int32 1.0M @>, emitCallMethod (Expr.getMethodInfo <@ Decimal.op_Explicit(1.0M) : int32 @>))
  -    dict.Add(Expr.getMethodInfo <@ uint32 1.0M @>, emitCallMethod (Expr.getMethodInfo <@ Decimal.op_Explicit(1.0M) : uint32 @>))
  -    dict.Add(Expr.getMethodInfo <@ int64 1.0M @>, emitCallMethod (Expr.getMethodInfo <@ Decimal.op_Explicit(1.0M) : int64 @>))
  -    dict.Add(Expr.getMethodInfo <@ uint64 1.0M @>, emitCallMethod (Expr.getMethodInfo <@ Decimal.op_Explicit(1.0M) : uint64 @>))
   
       dict.Add(Expr.getMethodInfo <@ byte "" @>, emitOpCode (Call (Method (Expr.getMethodInfo <@ LanguagePrimitives.ParseUInt32 @>)))
                                         |>> emitOpCode Conv_Ovf_U1)
  
positive.code:     dict.Add(Expr.getMethodInfo <@ 1u <<< 1 @>, emitOpCode (Ldc_I4_S 31) |>> emitOpCode And |>> emitOpCode Shl)
      dict.Add(Expr.getMethodInfo <@ 1us <<< 1 @>, emitOpCode (Ldc_I4_S 15) |>> emitOpCode And |>> emitOpCode Shl |>> convUInt16)
      dict.Add(Expr.getMethodInfo <@ 1uy <<< 1 @>, emitOpCode (Ldc_I4_7) |>> emitOpCode And |>> emitOpCode Shl |>> convUInt8)
  
      dict.Add(Expr.getMethodInfo <@ -(1I) @>, emitCallMethod (Expr.getMethodInfo <@ Numerics.BigInteger.op_UnaryNegation @>))
      dict.Add(Expr.getMethodInfo <@ 1I - 1I @>, emitCallMethod (Expr.getMethodInfo <@ Numerics.BigInteger.op_Subtraction @>))
      dict.Add(Expr.getMethodInfo <@ 1I / 1I @>, emitCallMethod (Expr.getMethodInfo <@ Numerics.BigInteger.op_Division @>))
      dict.Add(Expr.getMethodInfo <@ 1I % 1I @>, emitCallMethod (Expr.getMethodInfo <@ Numerics.BigInteger.op_Modulus @>))
      dict.Add(Expr.getMethodInfo <@ 1I &&& 1I @>, emitCallMethod (Expr.getMethodInfo <@ Numerics.BigInteger.op_BitwiseAnd @>))
      dict.Add(Expr.getMethodInfo <@ 1I ||| 1I @>, emitCallMethod (Expr.getMethodInfo <@ Numerics.BigInteger.op_BitwiseOr @>))
      dict.Add(Expr.getMethodInfo <@ 1I ^^^ 1I @>, emitCallMethod (Expr.getMethodInfo <@ Numerics.BigInteger.op_ExclusiveOr @>))
      dict.Add(Expr.getMethodInfo <@ 1I >>> 1 @>, emitCallMethod (Expr.getMethodInfo <@ Numerics.BigInteger.op_RightShift @>))
      dict.Add(Expr.getMethodInfo <@ 1I <<< 1 @>, emitCallMethod (Expr.getMethodInfo <@ Numerics.BigInteger.op_LeftShift @>))
  
      dict.Add(Expr.getMethodInfo <@ 1M + 1M @>, emitCallMethod (Expr.getMethodInfo <@ System.Decimal.op_Addition @>))
      dict.Add(Expr.getMethodInfo <@ 1M - 1M @>, emitCallMethod (Expr.getMethodInfo <@ System.Decimal.op_Subtraction @>))
      dict.Add(Expr.getMethodInfo <@ 1M * 1M @>, emitCallMethod (Expr.getMethodInfo <@ System.Decimal.op_Multiply @>))
      dict.Add(Expr.getMethodInfo <@ 1M / 1M @>, emitCallMethod (Expr.getMethodInfo <@ System.Decimal.op_Division @>))
      dict.Add(Expr.getMethodInfo <@ 1M % 1M @>, emitCallMethod (Expr.getMethodInfo <@ System.Decimal.op_Modulus @>))
  
      dict.Add(Expr.getMethodInfo <@ byte 1 @>, doNothing)
      dict.Add(Expr.getMethodInfo <@ sbyte 1 @>, doNothing)
  
negative.code:       | OpExplicit <@ uint64 @> op
        | OpExplicit <@ uint8 @> op
        | OpExplicit <@ unativeint @> op
        | OpExplicit <@ Checked.byte @> op
        | OpExplicit <@ Checked.char @> op
        | OpExplicit <@ Checked.int @> op
        | OpExplicit <@ Checked.int16 @> op
        | OpExplicit <@ Checked.int32 @> op
        | OpExplicit <@ Checked.int64 @> op
        | OpExplicit <@ Checked.nativeint @> op
        | OpExplicit <@ Checked.sbyte @> op
        | OpExplicit <@ Checked.uint16 @> op
        | OpExplicit <@ Checked.uint32 @> op
        | OpExplicit <@ Checked.uint64 @> op
        | OpExplicit <@ Checked.unativeint @> op
            -> Some (emitCallMethod op)
        | _ -> None
      else
  