anchor.diff:                              | _ -> raise (Exception "invalid logic")
                           | f -> f
   
  -                    match pass2 with
  -                    | null -> makeCompareDelegate ty ty typedefof<GenericComparerObj<_>>
  -                    | f -> f
  +                    let pass3 =
  +                        // These do not require seperate versions based on equivalence relations, defer to helper
  +                        match pass2 with
  +                        | null -> comparisonInterfaces ty
  +                        | f -> f
  +
  +                    let pass4 = 
  +                        match pass3 with
  +                        | null -> makeCompareDelegate ty ty typedefof<GenericComparerObj<_>>
  +                        | f -> f
  +
  +                    pass4
   
                   type Function<'relation, 'a>() =
                       static let func : Func<IComparer,'a, 'a, int> =
  
positive.code:                     override __.Equals _ = raise (Exception "invalid logic")
                      override __.GetHashCode () = raise (Exception "invalid logic")
  
                  let withRelation (tyRelation:Type) (ty:Type) : obj =
                      let pass0 : obj = null // TODO: deal with float
  
                      let pass1 =
                          match pass0 with
  
negative.code:                         if comp.ComparerType.Equals ComparerType.ER then
                              x.CompareTo yobj
                          else 
                              match xobj, yobj with
                              | (:? float as x), (:? float as y) -> 
                                  if System.Double.IsNaN x || System.Double.IsNaN y
                                      then getPERNaNCompareToResult comp
                                      else x.CompareTo y
                              | (:? float32 as x), (:? float32 as y) -> 
                                  if System.Single.IsNaN x || System.Single.IsNaN y
                                      then getPERNaNCompareToResult comp
                                      else x.CompareTo y
                              | _ -> x.CompareTo yobj
  
  