Как я могу скрыть методы в F #?

В настоящее время я реализую инфраструктуру Spec в F #, и я хочу скрыть методы Equals, GetHashCode и т. Д. На моемshould типа, чтобы API не загромождался этими.

Я знаю, что в C # это делается путем того, чтобы класс реализовывал такой интерфейс:

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();
}

Я пытался сделать то же самое в F #:

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

Реализовано это в моем виде:

        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() 

но без успеха.

Я также попытался переопределить методы в моем типе и добавить атрибут таким образом, но это тоже не помогло.

Таким образом, остается вопрос, как я могу очистить мой API?

Редактировать:

Благодаря помощи (см. Ниже) я смог решить мою проблему.

В итоге,.Equals а также.GetHashCode может быть скрыт через[<NoEquality>] [<NoComparison>] но это также изменит семантику.

Скрытие через атрибуты EditorBrowsable не работает.

Единственный способ иметь чистый API и при этом иметь возможность перегружать методы - сделать эти члены метода статичными.

Полученный класс можно найти, просмотрев внутри моего проектаFSharpSpec.

Тип вопроса может быть найденВот.

Спасибо всем, кто помог мне решить эту проблему.

Ура ...

Ответы на вопрос(3)

Ваш ответ на вопрос