Я пытаюсь создать неизменяемый тип коллекции, который ведет себя как гибридный из мультимножества/мешка и карты, которая записывает количество вхождений каждого элемента.Как написать неизменяемый TallySet (счетный мультимножество) в FSharp
Я могу написать измененный код с немного похожим ниже, и я попытался написать неизменяемый, наследуя от Карты, но Map запечатан и не позволит мне определить какие-либо переопределения.
type TallySet<'k_t when 'k_t : comparison>() = class
// inherit Map<'k_t, int>
let m_map:((Map<'k_t, int>) ref) = ref (Map.empty)
member x.add item =
m_map :=
match (!m_map).TryFind item with
| None -> (!m_map).Add(item, 1)
| Some n -> (!m_map).Add(item, 1 + n)
!m_map
member x.Count with get() = Map.fold (fun cc k v -> cc + v) 0 !m_map
end
Что мне написать?
Рассматривая код для [Тип карты в F #] (https://github.com/fsharp/fsharp/blob/master/src/fsharp/FSharp.Core/map.fs) и [соответствующий файл подписи ] (https://github.com/fsharp/fsharp/blob/master/src/fsharp/FSharp.Core/map.fsi) было бы хорошим началом. Обратите внимание, что большинство функций, которые вы используете, используются изо дня в день в модуле карты (прокрутка слегка вниз). – asibahi