feat: add ForIn instance for PHashSet (#7214)
This PR adds a `ForIn` instance for the `PersistentHashSet` type.
This commit is contained in:
parent
77e0fa4efe
commit
5cbeb22564
2 changed files with 42 additions and 0 deletions
|
|
@ -53,4 +53,11 @@ variable {_ : BEq α} {_ : Hashable α}
|
|||
def toList (s : PersistentHashSet α) : List α :=
|
||||
s.set.toList.map (·.1)
|
||||
|
||||
protected def forIn {_ : BEq α} {_ : Hashable α} [Monad m]
|
||||
(s : PersistentHashSet α) (init : σ) (f : α → σ → m (ForInStep σ)) : m σ := do
|
||||
PersistentHashMap.forIn s.set init fun p s => f p.1 s
|
||||
|
||||
instance {_ : BEq α} {_ : Hashable α} : ForIn m (PersistentHashSet α) α where
|
||||
forIn := PersistentHashSet.forIn
|
||||
|
||||
end PersistentHashSet
|
||||
|
|
|
|||
35
tests/lean/run/forIn_phashset.lean
Normal file
35
tests/lean/run/forIn_phashset.lean
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
import Lean.Data.PersistentHashSet
|
||||
|
||||
open Lean
|
||||
|
||||
def sum (s : PHashSet Nat) : Nat := Id.run do
|
||||
let mut r := 0
|
||||
for a in s do
|
||||
r := r + a
|
||||
return r
|
||||
|
||||
def sumIf (s : PHashSet Nat) (p : Nat → Bool) : Nat := Id.run do
|
||||
let mut r := 0
|
||||
for a in s do
|
||||
unless p a do
|
||||
continue
|
||||
r := r + a
|
||||
return r
|
||||
|
||||
def mk [Hashable α] [BEq α] (f : Nat → α) (n : Nat) : PHashSet α := Id.run do
|
||||
let mut s := {}
|
||||
for i in [:n] do
|
||||
s := s.insert (f i)
|
||||
return s
|
||||
|
||||
/-- info: 45 -/
|
||||
#guard_msgs in
|
||||
#eval sum (mk id 10)
|
||||
|
||||
/-- info: 9900 -/
|
||||
#guard_msgs in
|
||||
#eval sum (mk (2*·) 100)
|
||||
|
||||
/-- info: 2450 -/
|
||||
#guard_msgs in
|
||||
#eval sumIf (mk id 100) (· % 2 == 0)
|
||||
Loading…
Add table
Reference in a new issue