anchor.diff:  
                       elif typeof<IStructuralEquatable>.IsAssignableFrom t                  then make typedefof<RefTypeStructualEquality<DummyRefTypeInterfaces>>
   
  -                     // only sealed as a derived class might inherit from IStructuralEquatable
  +                    // only sealed as a derived class might inherit from IStructuralEquatable
                       elif t.IsSealed && (makeEquatableType t).IsAssignableFrom t           then make typedefof<RefTypeEquatable<DummyRefTypeInterfaces>>
                       elif t.IsSealed                                                       then make typedefof<RefTypeEquals<DummyRefTypeInterfaces>>
  -#else
  -                    elif t.IsValueType && typeof<IStructuralEquatable>.IsAssignableFrom t then
  -                        let equals = typeof<IStructuralEquatable>.GetMethod ("Equals", [|typeof<obj>; typeof<IEqualityComparer>|])
  -                        let ec = Expression.Parameter typeof<IEqualityComparer>
  -                        let a = Expression.Parameter t
  -                        let b = Expression.Parameter t
  -                        let lambda = Expression.Lambda ((makeReturnType t), Expression.Call (a, equals, (Expression.Convert (b, typeof<obj>)), ec), ec, a, b)
  -                        upcast lambda.Compile ()
  -
  -                    elif t.IsValueType && (makeEquatableType t).IsAssignableFrom t then
  -                        let equals = (makeEquatableType t).GetMethod ("Equals", [|t|])
  -                        let ec = Expression.Parameter typeof<IEqualityComparer>
  -                        let a = Expression.Parameter t
  -                        let b = Expression.Parameter t
  -                        let lambda = Expression.Lambda ((makeReturnType t), Expression.Call (a, equals, b), ec, a, b)
  -                        upcast lambda.Compile ()
  -
  -                    elif t.IsValueType then
  -                        let equals = typeof<obj>.GetMethod ("Equals", [|typeof<obj>|])
  -                        let ec = Expression.Parameter typeof<IEqualityComparer>
  -                        let a = Expression.Parameter t
  -                        let b = Expression.Parameter t
  -                        let lambda = Expression.Lambda ((makeReturnType t), Expression.Call (a, equals, Expression.Convert (b, typeof<obj>)), ec, a, b)
  -                        upcast lambda.Compile ()
  -
  -                    elif typeof<IStructuralEquatable>.IsAssignableFrom t then
  -                        box GenericSpecializeEqualsOther.ReferenceTypeStructuralEquality
  -#endif
  +
                       else null
   
                   let hasFSharpCompilerGeneratedEquality (ty:Type) =
  -    #if FX_ATLEAST_40
                       let rec tryFindObjectsInterfaceMethod (objectType:Type) (interfaceType:Type) (methodName:string) (methodArgTypes:array<Type>) =
                           if not (interfaceType.IsAssignableFrom objectType) then null
                           else
  
positive.code:                     let func4Typedef = typedefof<Func<_,_,_,_>>
                      func4Typedef.MakeGenericType [| typeof<IEqualityComparer>; ty; ty; typeof<bool> |]
  
  #if FX_ATLEAST_40 // Missing Delegate.CreateDelegate in portable47
                  let makeEquatableDelegate (ty:Type) (ct:Type) (def:Type) : obj =
                      let concrete = def.MakeGenericType [|ct|]
                      let instance = Activator.CreateInstance concrete
  
negative.code:                         | null -> equalityInterfaces ty
                          | f -> f
  
                      let pass4 =
                          match pass3 with
                          | null ->
  