]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.runtime/scl/Iterator.scl
(refs #7259) Added Iterator.filter and MSet.filterInPlace
[simantics/platform.git] / bundles / org.simantics.scl.runtime / scl / Iterator.scl
index be7fb90e06e7f7517486275bdfc7614b79a3551c..19e51a0d5836d23cb2447daabdb1d2093e6d093a 100644 (file)
@@ -27,6 +27,19 @@ iterB f it = loop ()
              else False
         else True
 
+@inline
+filter :: (a -> <e> Boolean) -> T a -> <Proc,e> ()
+filter f it = loop ()
+  where
+    loop _ = 
+        if hasNext it
+        then do
+            if f (next it)
+            then ()
+            else remove it
+            loop ()
+        else ()
+
 @inline
 mapFirst :: (a -> <e> Maybe b) -> T a -> <Proc,e> Maybe b
 mapFirst f it = loop ()