-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-- https://lean-lang.org/doc/api/Lake/Util/Family.html
import Lean
import Lake
open Lean
open Lake
opaque FooFam (idx : Name) : Type
abbrev FooMap := Std.DTreeMap Name FooFam Name.quickCmp
def FooMap.insert (self : FooMap) (idx : Name) [FamilyOut FooFam idx α] (a : α) : FooMap :=
Std.DTreeMap.insert self idx (toFamily a)
def FooMap.get? (self : FooMap) (idx : Name) [FamilyOut FooFam idx α] : Option α :=
ofFamily <$> Std.DTreeMap.get? self idx
family_def bar : FooFam `bar := Nat
family_def baz : FooFam `baz := String
def foo := Id.run do
let mut map : FooMap := {}
map := map.insert `bar 5
map := map.insert `baz "str"
return map.get? `bar
def f (idx : Name) [FamilyOut FooFam idx α] :=
match
#eval foo -- 5