@@ -37,7 +37,7 @@ deriving Repr, DecidableEq, Inhabited
3737
3838namespace Map
3939
40- public abbrev kvs {α : Type u} {β : Type v} (m : Map α β) := m.1
40+ private abbrev kvs {α : Type u} {β : Type v} (m : Map α β) := m.1
4141
4242----- Definitions -----
4343
@@ -51,18 +51,17 @@ public def empty {α β} : Map α β := .mk []
5151/-- Returns an ordered and duplicate free list provided the given map is well-formed. -/
5252public def toList {α : Type u} {β : Type v} (m : Map α β) : List (Prod α β) := m.kvs
5353
54-
5554/-- Returns the keys of `m` as a set. -/
5655public def keys {α β} (m : Map α β) : Set α :=
57- Set.mk (m.kvs .map Prod.fst) -- well-formed by construction
56+ Set.mk (m.toList .map Prod.fst) -- well-formed by construction
5857
5958/-- Returns the values of `m` as a list. -/
6059public def values {α β} (m : Map α β) : List β :=
61- m.kvs .map Prod.snd
60+ m.toList .map Prod.snd
6261
6362/-- Returns the binding for `k` in `m`, if any. -/
6463public def find? {α β} [BEq α] (m : Map α β) (k : α) : Option β :=
65- match m.kvs .find? (λ ⟨k', _⟩ => k' == k) with
64+ match m.toList .find? (λ ⟨k', _⟩ => k' == k) with
6665 | some (_, v) => some v
6766 | _ => none
6867
@@ -84,23 +83,26 @@ public def find! {α β} [Repr α] [BEq α] [Inhabited β] (m : Map α β) (k :
8483
8584/-- Filters `m` using `f`. -/
8685public def filter {α β} (f : α → β → Bool) (m : Map α β) : Map α β :=
87- Map.mk (m.kvs .filter (λ ⟨k, v⟩ => f k v))
86+ Map.mk (m.toList .filter (λ ⟨k, v⟩ => f k v))
8887
8988public def size {α β} (m : Map α β) : Nat :=
90- m.kvs .length
89+ m.toList .length
9190
9291public def mapOnValues {α β γ} (f : β → γ) (m : Map α β) : Map α γ :=
93- Map.mk (m.kvs.map (λ (k, v) => (k, f v)))
92+ Map.mk (m.toList.map (λ (k, v) => (k, f v)))
93+
94+ public def mapOnValues₃ {α β γ} (f : β → γ) (m : Map α β) : Map α γ :=
95+ Map.mk (m.toList.map₃ (λ ⟨(k, v), _⟩ => (k, f v)))
9496
9597public def mapOnKeys {α β γ} [LT γ] [DecidableLT γ] (f : α → γ) (m : Map α β) : Map γ β :=
96- Map.make (m.kvs .map (λ (k, v) => (f k, v)))
98+ Map.make (m.toList .map (λ (k, v) => (f k, v)))
9799
98100public def mapMOnValues {α β γ} [LT α] [DecidableLT α] [Monad m] (f : β → m γ) (map : Map α β) : m (Map α γ) := do
99- let kvs ← map.kvs .mapM (λ (k, v) => f v >>= λ v' => pure (k, v'))
101+ let kvs ← map.toList .mapM (λ (k, v) => f v >>= λ v' => pure (k, v'))
100102 pure (Map.mk kvs)
101103
102104public def mapMOnKeys {α β γ} [LT γ] [DecidableLT γ] [Monad m] (f : α → m γ) (map : Map α β) : m (Map γ β) := do
103- let kvs ← map.kvs .mapM (λ (k, v) => f k >>= λ k' => pure (k', v))
105+ let kvs ← map.toList .mapM (λ (k, v) => f k >>= λ k' => pure (k', v))
104106 pure (Map.make kvs)
105107
106108public def wellFormed {α β} [LT α] [DecidableLT α] (m : Map α β) : Bool :=
@@ -109,17 +111,17 @@ public def wellFormed {α β} [LT α] [DecidableLT α] (m : Map α β) : Bool :=
109111----- Instances -----
110112
111113public instance [LT (Prod α β)] : LT (Map α β) where
112- lt a b := a.kvs < b.kvs
114+ lt a b := a.1 < b.1
113115
114116public instance decLt [LT (Prod α β)] [DecidableEq (Prod α β)] [DecidableLT (Prod α β)] : (n m : Map α β) → Decidable (n < m)
115117 | .mk nkvs, .mk mkvs => List.decidableLT nkvs mkvs
116118
117119-- enables ∈ notation for map keys
118120public instance : Membership α (Map α β) where
119- mem m a := List.Mem a (m.kvs .map Prod.fst)
121+ mem m a := List.Mem a (m.toList .map Prod.fst)
120122
121123public instance [LT α] [DecidableLT α] : HAppend (Map α β) (Map α β) (Map α β) where
122- hAppend a b := Map.make (a.kvs ++ b.kvs )
124+ hAppend a b := Map.make (a.toList ++ b.toList )
123125
124126end Map
125127
0 commit comments