Wie kann ich Methoden in F # ausblenden?

Ich implementiere derzeit ein Spec-Framework in F # und möchte die Methoden Equals, GetHashCode usw. auf meinem ausblendenshould Typ, damit die API nicht mit diesen überladen wird.

Ich weiß, dass dies in C # geschieht, indem die Klasse eine Schnittstelle wie die folgende implementiert:

using System;
using System.ComponentModel;

public interface IFluentInterface
{
    [EditorBrowsable(EditorBrowsableState.Never)]
    bool Equals(object other);

    [EditorBrowsable(EditorBrowsableState.Never)]
    string ToString();

    [EditorBrowsable(EditorBrowsableState.Never)]
    int GetHashCode();

    [EditorBrowsable(EditorBrowsableState.Never)]
    Type GetType();
}

Ich habe versucht, dasselbe in F # zu tun:

type IFluentInterface = interface

    [<EditorBrowsable(EditorBrowsableState.Never)>]
    abstract Equals : (obj) -> bool

    [<EditorBrowsable(EditorBrowsableState.Never)>]
    abstract ToString: unit -> string

    [<EditorBrowsable(EditorBrowsableState.Never)>]
    abstract GetHashCode: unit -> int

    [<EditorBrowsable(EditorBrowsableState.Never)>]
    abstract GetType : unit -> Type 
end

Implementiert es in meinem Typ:

        interface IFluentInterface with
        member x.Equals(other) = x.Equals(other)
        member x.ToString()    = x.ToString() 
        member x.GetHashCode() = x.GetHashCode()
        member x.GetType()     = x.GetType() 

aber ohne Erfolg.

Ich habe auch versucht, die Methoden in meinem Typ zu überschreiben und das Attribut auf diese Weise hinzuzufügen, aber das hat auch nicht geholfen.

Die Frage bleibt also, wie kann ich meine API bereinigen?

Bearbeiten:

Dank der Hilfe (siehe unten) konnte ich mein Problem lösen.

In Summe,.Equals und.GetHashCode kann über ausgeblendet werden[<NoEquality>] [<NoComparison>] Das wird aber auch die Semantik verändern.

Das Ausblenden über EditorBrowsable-Attribute funktioniert nicht.

Die einzige Möglichkeit, eine saubere API zu haben und dennoch Methoden zu überladen, besteht darin, diese Methodenmember statisch zu machen.

Die resultierende Klasse kann durch Browsen in meinem Projekt gefunden werdenFSharpSpec.

Der betreffende Typ kann gefunden werdenHier.

Vielen Dank an alle, die mir bei der Lösung dieses Problems geholfen haben.

Prost ...

Antworten auf die Frage(3)

Ihre Antwort auf die Frage