anchor.diff:          let Float32Comparer = MakeGenericComparer<float32>()
           let DecimalComparer = MakeGenericComparer<decimal>()
   
  +        let getFastGenericComparerTable ty =
  +            match ty with 
  +            | ty when ty.Equals typeof<byte>       -> box ByteComparer
  +            | ty when ty.Equals typeof<char>       -> box CharComparer
  +            | ty when ty.Equals typeof<sbyte>      -> box SByteComparer
  +            | ty when ty.Equals typeof<int16>      -> box Int16Comparer
  +            | ty when ty.Equals typeof<int32>      -> box Int32Comparer
  +            | ty when ty.Equals typeof<int64>      -> box Int64Comparer
  +            | ty when ty.Equals typeof<nativeint>  -> box IntPtrComparer
  +            | ty when ty.Equals typeof<uint16>     -> box UInt16Comparer
  +            | ty when ty.Equals typeof<uint32>     -> box UInt32Comparer
  +            | ty when ty.Equals typeof<uint64>     -> box UInt64Comparer
  +            | ty when ty.Equals typeof<unativeint> -> box UIntPtrComparer
  +            | ty when ty.Equals typeof<float>      -> box FloatComparer
  +            | ty when ty.Equals typeof<float32>    -> box Float32Comparer
  +            | ty when ty.Equals typeof<decimal>    -> box DecimalComparer
  +            | ty when ty.Equals typeof<string>     -> box StringComparer
  +            | _ -> null
  +
           /// Use a type-indexed table to ensure we only create a single FastStructuralComparison function
           /// for each type
           [<CodeAnalysis.SuppressMessage("Microsoft.Performance","CA1812:AvoidUninstantiatedInternalClasses")>]     
           type FastGenericComparerTable<'T>() = 
  -
  +            static let f : System.Collections.Generic.IComparer<'T>  = 
  +                match getFastGenericComparerTable typeof<'T> with 
  +                | null -> MakeGenericComparerWithEssence<'T>()
  +                | ic -> unboxPrim ic
  +
  +            static member Value : System.Collections.Generic.IComparer<'T> = f
  +
  +        let getFastGenericComparerTable_fCanBeNull ty =
               // The CLI implementation of mscorlib optimizes array sorting
               // when the comparer is either null or precisely
               // reference-equals to System.Collections.Generic.Comparer<'T>.Default.
  
positive.code:         let Float32IEquality = MakeGenericEqualityComparer<float32>()
          let DecimalIEquality = MakeGenericEqualityComparer<decimal>()
  
          [<CodeAnalysis.SuppressMessage("Microsoft.Performance","CA1812:AvoidUninstantiatedInternalClasses")>]     
          type FastGenericEqualityComparerTable<'T>() = 
              static let f : System.Collections.Generic.IEqualityComparer<'T> = 
                  match typeof<'T> with 
                  | ty when ty.Equals(typeof<bool>)       -> unboxPrim (box BoolIEquality)
                  | ty when ty.Equals(typeof<byte>)       -> unboxPrim (box ByteIEquality)
                  | ty when ty.Equals(typeof<int32>)      -> unboxPrim (box Int32IEquality)
                  | ty when ty.Equals(typeof<uint32>)     -> unboxPrim (box UInt32IEquality)
                  | ty when ty.Equals(typeof<char>)       -> unboxPrim (box CharIEquality)
                  | ty when ty.Equals(typeof<sbyte>)      -> unboxPrim (box SByteIEquality)
                  | ty when ty.Equals(typeof<int16>)      -> unboxPrim (box Int16IEquality)
                  | ty when ty.Equals(typeof<int64>)      -> unboxPrim (box Int64IEquality)
                  | ty when ty.Equals(typeof<nativeint>)  -> unboxPrim (box IntPtrIEquality)
                  | ty when ty.Equals(typeof<uint16>)     -> unboxPrim (box UInt16IEquality)
                  | ty when ty.Equals(typeof<uint64>)     -> unboxPrim (box UInt64IEquality)
                  | ty when ty.Equals(typeof<unativeint>) -> unboxPrim (box UIntPtrIEquality)
                  | ty when ty.Equals(typeof<float>)      -> unboxPrim (box FloatIEquality)
                  | ty when ty.Equals(typeof<float32>)    -> unboxPrim (box Float32IEquality)
                  | ty when ty.Equals(typeof<decimal>)    -> unboxPrim (box DecimalIEquality)
                  | ty when ty.Equals(typeof<string>)     -> unboxPrim (box StringIEquality)
                  | _ -> MakeGenericEqualityComparerWithEssence<'T>()
              static member Function : System.Collections.Generic.IEqualityComparer<'T> = f
  
          let FastGenericEqualityComparerFromTable<'T> = FastGenericEqualityComparerTable<'T>.Function
  
negative.code:             // same as a stable sort of the array. See Array.stableSortInPlace.
              //
              // REVIEW: in a future version we could extend this to include additional types 
              ty.Equals typeof<byte>
              || ty.Equals typeof<char>
              || ty.Equals typeof<sbyte>
              || ty.Equals typeof<int16>
              || ty.Equals typeof<int32>
              || ty.Equals typeof<int64>
              || ty.Equals typeof<uint16>
              || ty.Equals typeof<uint32>
              || ty.Equals typeof<uint64>
              || ty.Equals typeof<float>    
              || ty.Equals typeof<float32>
              || ty.Equals typeof<decimal>
  
          type FastGenericComparerTable_fCanBeNull<'T>() = 
              static let fCanBeNull : System.Collections.Generic.IComparer<'T>  = 
                  match getFastGenericComparerTable_fCanBeNull typeof<'T> with 
                  | true -> null
                  | false -> FastGenericComparerTable.Value
  
              static member ValueCanBeNullIfDefaultSemantics : System.Collections.Generic.IComparer<'T> = fCanBeNull
          
  