anchor.diff:                          fun () -> standardTypes ty
                           fun () -> compilerGenerated tyRelation ty
                           fun () -> arrays tyRelation ty
  +                        fun () -> nullableType ty
                           fun () -> equalityInterfaces ty
                           fun () -> defaultEquality tyRelation ty
                       |]
  
positive.code: 
                  let arrays (tyRelation:Type) (t:Type) : obj =
                      if t.IsArray || typeof<System.Array>.IsAssignableFrom t then
                          // TODO: Future; currently just returns default
                          match tyRelation with
                          | r when r.Equals typeof<PartialEquivalenceRelation> -> makeEquatableDelegate t t typedefof<GenericEqualityObj_PER<_>>
                          | r when r.Equals typeof<EquivalenceRelation>        -> makeEquatableDelegate t t typedefof<GenericEqualityObj_ER<_>>
                          | _ -> raise (Exception "invalid logic")
                      else null
  
                  let equalityInterfaces (t:Type) : obj =
                      let make = makeEquatableDelegate t t
  
                      let equatable = mos.makeEquatableType t
  
                      if t.IsGenericType && ((t.GetGenericTypeDefinition ()).Equals typedefof<System.Nullable<_>>) then
                          let nt = get (t.GetGenericArguments()) 0
                          let make = makeEquatableDelegate t nt 
                          
                          if typeof<IStructuralEquatable>.IsAssignableFrom nt               then make Exemplars.nullableStructuralEquatable
                          elif (mos.makeEquatableType nt).IsAssignableFrom nt               then make Exemplars.nullableEquatable
                          else                                                                   make Exemplars.nullableEquality
  
                      elif t.IsValueType && typeof<IStructuralEquatable>.IsAssignableFrom t then make Exemplars.valueTypeStructuralEquatable
                      elif t.IsValueType && equatable.IsAssignableFrom t                    then make Exemplars.valueTypeEquatable
                      elif t.IsValueType                                                    then make Exemplars.valueTypeEquality
  
  
negative.code: 
                  let arrays (t:Type) : obj =
                      if t.IsArray || typeof<System.Array>.IsAssignableFrom t then
                          // TODO: Future; for now just default back to previous functionality
                          makeGetHashCodeDelegate t t typedefof<GenericHashParamObject<_>>
                      else null
  
                  let nullableType (t:Type) : obj =
                      if t.IsGenericType && ((t.GetGenericTypeDefinition ()).Equals typedefof<System.Nullable<_>>) then
                          let underlying = get (t.GetGenericArguments()) 0
                          let make = makeGetHashCodeDelegate t underlying 
                          
                          if typeof<IStructuralEquatable>.IsAssignableFrom underlying then make Exemplars.nullableStructuralEquatable
                          else                                                             make Exemplars.nullableEquality
                      else null
  
                  let structualEquatable (t:Type): obj =
                      let make = makeGetHashCodeDelegate t t
  
                      if   t.IsValueType && typeof<IStructuralEquatable>.IsAssignableFrom t then make Exemplars.valueTypeStructuralEquatable
                      elif typeof<IStructuralEquatable>.IsAssignableFrom t                  then make Exemplars.refTypeStructuralEquatable
                      else null
  
                  let sealedTypes (t:Type): obj =
                      let make = makeGetHashCodeDelegate t t
  
                      if t.IsValueType then make Exemplars.valueTypeEquality
                      elif t.IsSealed  then make Exemplars.refTypeEquality
                      else null
  
  