コンテキスト:F#で.net/c#-library Fareを使用しています。 Map.ofSeq
。これは、System.IComprable
インターフェイス(FS0001)を実装していないため、Fare.State
は比較をサポートしていないため失敗します。私naivityでF#:既存のタイプ(Fareなどのライブラリなど)にインターフェイスを追加する
、私はこのようなinterface IComparable
を追加しようとしました:
type Fare.State with
interface IComparable<Fare.State> with
member this.CompareTo obj =
match box obj with
| :? Fare.State as other -> this.Id.CompareTo other.Id
| _ -> invalidArg "obj" "not a State"
F#が実装されたインタフェースは、タイプ(FS0909)の最初の宣言で宣言されなければならない必要があり、これは、しかし、不可能です。
私は、次の作品策を考えた:その唯一の属性としてFare.State
が含まれており、代わりに実際のFare.State
のIDを保存するIComparable
- 実際の状態に変換する必要がある場合
interface IComparable
を既存のタイプに追加するトリックを使用します。
3番目のオプションが不可能な場合は、どのオプションが最適ですか?他のオプションはありますか?
5th a * 4th *オプションは、[Fare](https://github.com/moodmosaic/Fare)のプルリクエストを開いてそのインターフェイスを実装することができますか? –
私は、c#-developersがf#-friendsの生活を楽にするコードを追加することに非常に関心があるかどうかは完全にはわかりません。 – fsharpnoob
Fareの 'State' *は、[IComperable]を[(source)]に実装しています(https://github.com/moodmosaic/Fare/blob/f453ef1ef07f1f9e52851239a8aa477ef86ea1f1/Src/Fare/State.cs#L44)。 –