aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/list_util.sml
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adamc@hcoop.net>2009-06-16 14:38:01 -0400
committerGravatar Adam Chlipala <adamc@hcoop.net>2009-06-16 14:38:01 -0400
commit4dce690086c8d6132c22d5c47a0561a4b1261293 (patch)
tree58dd4551f8c5d971e12e1c704f7abd9d90f3373e /src/list_util.sml
parentc23f27988ff76b4923a63ced2452c4fd7787a745 (diff)
Fix a bug in type class enrichment from substructures
Diffstat (limited to 'src/list_util.sml')
-rw-r--r--src/list_util.sml31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/list_util.sml b/src/list_util.sml
index 1f6b24ee..03c9549e 100644
--- a/src/list_util.sml
+++ b/src/list_util.sml
@@ -123,6 +123,24 @@ fun foldlMapPartial f s =
fm ([], s)
end
+fun foldlMapiPartial f s =
+ let
+ fun fm (n, ls', s) ls =
+ case ls of
+ nil => (rev ls', s)
+ | h :: t =>
+ let
+ val (h', s') = f (n, h, s)
+ val ls' = case h' of
+ NONE => ls'
+ | SOME h' => h' :: ls'
+ in
+ fm (n + 1, ls', s') t
+ end
+ in
+ fm (0, [], s)
+ end
+
fun foldlMapAbort f s =
let
fun fm (ls', s) ls =
@@ -172,6 +190,19 @@ fun mapi f =
m 0 []
end
+fun mapiPartial f =
+ let
+ fun m i acc ls =
+ case ls of
+ [] => rev acc
+ | h :: t =>
+ m (i + 1) (case f (i, h) of
+ NONE => acc
+ | SOME v => v :: acc) t
+ in
+ m 0 []
+ end
+
fun appi f =
let
fun m i ls =