blob: 4c5f6cfb9f7319bbabc5b7d78a79875c08f52309 (
plain)
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
28
29
30
31
32
33
34
|
module Inky.Data.Context
import public Inky.Data.Assoc
import public Inky.Data.SnocList
import Inky.Data.SnocList.Quantifiers
-- Contexts --------------------------------------------------------------------
public export
Context : Type -> Type
Context a = SnocList (Assoc a)
public export
(.names) : Context a -> SnocList String
[<].names = [<]
(ctx :< nx).names = ctx.names :< nx.name
export
mapNames : (0 f : a -> b) -> (ctx : Context a) -> (map (map f) ctx).names = ctx.names
mapNames f [<] = Refl
mapNames f (ctx :< nx) = cong (:< nx.name) $ mapNames f ctx
-- Construction ----------------------------------------------------------------
public export
fromAll : {sx : SnocList String} -> All (Assoc0 a) sx -> Context a
fromAll [<] = [<]
fromAll {sx = sx :< n} (ctx :< (_ :- x)) = fromAll ctx :< (n :- x)
export
fromAllNames : {sx : SnocList String} -> (ctx : All (Assoc0 a) sx) -> (fromAll ctx).names = sx
fromAllNames [<] = Refl
fromAllNames {sx = sx :< n} (ctx :< (k :- x)) = cong (:< n) $ fromAllNames ctx
|