Ich habe Schwierigkeiten, Vergleich/Gleichheit bei einem Union-Typ darzustellen, dessen Fälle ausgeblendet sind. Dies ist, was ich mit begonnen:
Modul.FSI
type A<'T when 'T : comparison>
Modul.FS
type A<'T when 'T : comparison> = A of 'T list
Programm.FS
[<StructuralEquality;StructuralComparison>]
type B =
| Case1
| Case2 of Module.A<char>
Aber ich erhalte die Fehlermeldung:
The struct, record or union type 'B' has the 'StructuralComparison'
attribute but the component type 'Module.A<char>' does not satisfy the
'comparison' constraint
Ich habe versucht, die benutzerdefinierte Gleichstellung auf A zu verwenden:
Modul.FSI
[<CustomEquality;CustomComparison>]
type A<'T when 'T : comparison>
with
interface System.IComparable
override Equals : y:obj -> bool
override GetHashCode : unit -> int
end
Modul.FS
[<CustomEquality;CustomComparison>]
type A<'T when 'T : comparison> = A of 'T list
with
override x.Equals y = ...
override x.GetHashCode() = ...
interface System.IComparable with
member x.CompareTo(y) = ...
Aber ich verstehe das:
This construct is deprecated: The syntax 'type X with ...' is reserved
for augmentations. Types whose representations are hidden but which have
members are now declared in signatures using 'type X = ...'.
Ist dies der richtige Weg, um einen Vergleich von einem Gewerkschaftstyp mit privaten Fällen aufzudecken? Wie lautet die korrekte Syntax dafür in Signaturdateien?