Skip to content

Instantly share code, notes, and snippets.

@latkin
Last active August 29, 2015 14:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save latkin/1fa448d941c9383a4bc7 to your computer and use it in GitHub Desktop.
Save latkin/1fa448d941c9383a4bc7 to your computer and use it in GitHub Desktop.
Seq.cache repro
open System.Collections.Generic
let someDataSource = seq{ 1 .. 100 }
let ordersForTask = Dictionary<int, seq<int>>()
let getOrdersForTask task =
match ordersForTask.TryGetValue task with
| true, orders -> orders
| false, _ ->
let orders =
someDataSource
|> Seq.filter (fun n -> printfn "filtering..."; n % 2 = 0)
|> Seq.cache
ordersForTask.Add(task, orders)
orders
(* trying it out
> getOrdersForTask 3 ;;
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
val it : seq<int> = seq [2; 4; 6; 8; ...]
> getOrdersForTask 5 ;;
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
val it : seq<int> = seq [2; 4; 6; 8; ...]
> getOrdersForTask 3 ;;
val it : seq<int> = seq [2; 4; 6; 8; ...]
> getOrdersForTask 3 ;;
val it : seq<int> = seq [2; 4; 6; 8; ...]
> getOrdersForTask 3 ;;
val it : seq<int> = seq [2; 4; 6; 8; ...]
> getOrdersForTask 7 ;;
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
val it : seq<int> = seq [2; 4; 6; 8; ...]
> getOrdersForTask 7 ;;
val it : seq<int> = seq [2; 4; 6; 8; ...]
> getOrdersForTask 7 |> Seq.length ;;
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
filtering...
val it : int = 50
> getOrdersForTask 7 |> Seq.length ;;
val it : int = 50
> getOrdersForTask 7 |> Seq.length ;;
val it : int = 50
> getOrdersForTask 7 |> Seq.length ;;
val it : int = 50
*)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment