anchor.diff:                              let t0 = (get tyDefArgs 0)
                               let t1 = (get tyDefArgs 1)
                               let t2 = (get tyDefArgs 2)
  -                            let ghc0 = (getEssenceOfEqualsObj t0).GetType ()
  -                            let ghc1 = (getEssenceOfEqualsObj t1).GetType ()
  -                            let ghc2 = (getEssenceOfEqualsObj t2).GetType ()
  +                            let ghc0 = (getEssenceOfEqualsType t0)
  +                            let ghc1 = (getEssenceOfEqualsType t1)
  +                            let ghc2 = (getEssenceOfEqualsType t2)
   
                               let tt = typedefof<TupleEssenceOfEquals<int,int,int,tt,tt,tt>>
                               let zz = tt.MakeGenericType [| t0; t1; t2; ghc0; ghc1; ghc2 |] 
  
positive.code: 
                      static member Func = func
  
                      interface IGetEssenceOfEqualsObj with
                          member __.Get () = box func
  
              /// Implements generic equality between two values, with PER semantics for NaN (so equality on two NaN values returns false)
              //
  
negative.code:                         let tyDefArgs = ty.GetGenericArguments ()
                          if tyDef.Equals typedefof<Tuple<_>>       then
                              let t0 = (get tyDefArgs 0)
                              let ghc0 = (getEssenceOfGetHashCodeType t0)
  
                              let tt = typedefof<TupleEssenceOfGetHashCode<int,t>>
                              let zz = tt.MakeGenericType [| t0; ghc0; |] 
  