F# bounded LRU cache with recency tracking
F#
type LruCache<'K, 'V when 'K: comparison>(capacity: int) =
let mutable tick = 0
let mutable entries = Map.empty<'K, 'V * int>
member _.Get key =
match Map.tryFind key entries with
| Some (value, _) ->
tick <- tick + 1
entries <- Map.add key (value, tick) entries
Some value
| None -> None
member _.Put(key, value) =
tick <- tick + 1
entries <- Map.add key (value, tick) entries
if entries.Count > capacity then
let oldest = entries |> Map.toSeq |> Seq.minBy (fun (_, (_, t)) -> t) |> fst
entries <- Map.remove oldest entries
member _.Count = entries.Count