0 | module Libraries.Data.VarSet
8 | import Core.Name.Scoped
11 | import Libraries.Data.List.SizeOf
13 | import public Libraries.Data.VarSet.Core as VarSet
18 | singleton : Var vs -> VarSet vs
19 | singleton v = insert v Core.empty
22 | append : SizeOf inner -> VarSet inner -> VarSet outer ->
23 | VarSet (inner ++ outer)
24 | append p inn out = union (embed {tm = VarSet} inn) (weakenNs {tm = VarSet} p out)
27 | fromVarSet : (vars : Scope) -> VarSet vars -> (
newvars ** Thin newvars vars)
28 | fromVarSet [] xs = (
Scope.empty ** Refl)
29 | fromVarSet (n :: ns) xs =
30 | let (
_ ** svs)
= fromVarSet ns (VarSet.dropFirst xs) in
31 | if first `VarSet.elem` xs
32 | then (
_ ** Keep svs)
33 | else (
_ ** Drop svs)