3
我有以下類型:地圖在地圖上<'a, int>
type MultiSet<'a when 'a: comparison> = MSet of Map<'a, int>
,我現在想聲明AF地圖功能對於這種類型的帶有簽名:
('a -> 'b) -> Multiset<'a> -> Multiset<'b> when 'a : comparison and 'b : comparison
我曾嘗試:
let map m ms =
match ms with
| MSet s -> MSet (Map.map (fun key value -> m key) s)
但它有簽名:
('a -> int) -> Multiset<'a> -> Multiset<'a> when 'a : comparison
當我想要第一個提到的函數簽名時,我的實現有什麼問題?
這是一個很好的答案。請注意,當多箇舊密鑰映射到同一個新密鑰(應該將計數加在一起,或者引發錯誤,還是保留任意值時,可能還需要考慮該怎麼做)。 – kvb
這是一個很好的觀點。但我不想讓答案超載,只解決了眼前的問題。 –
很好的答案,非常感謝。 – Alexander