Ich habe die folgende Art:Karte auf der Karte <'a, int>
type MultiSet<'a when 'a: comparison> = MSet of Map<'a, int>
und ich möchte jetzt af Kartenfunktion für diese Art mit der Unterschrift erklären:
('a -> 'b) -> Multiset<'a> -> Multiset<'b> when 'a : comparison and 'b : comparison
Ich habe versucht:
let map m ms =
match ms with
| MSet s -> MSet (Map.map (fun key value -> m key) s)
Aber das es die Unterschrift hat:
('a -> int) -> Multiset<'a> -> Multiset<'a> when 'a : comparison
Was ist falsch an meiner Implementierung, wenn ich die zuerst erwähnte Funktionssignatur haben möchte?
Dies ist eine gute Antwort. Beachten Sie, dass es sich auch lohnt, zu überlegen, was zu tun ist, wenn mehrere alte Schlüssel demselben neuen Schlüssel zugeordnet werden (sollten die Zählwerte addiert oder ein Fehler ausgelöst oder ein willkürlicher Wert beibehalten werden?) – kvb
Dies ist ein guter Punkt. Aber ich wollte die Antwort nicht überladen, nur das unmittelbare Problem gelöst. –
Große Antwort, vielen Dank. – Alexander