[m-rev.] diff: additional modes for map.foldr/4 etc

Julien Fischer juliensf at csse.unimelb.edu.au
Sun Apr 15 00:59:39 AEST 2012


Branches: main, 11.07

Add additional modes to map.foldr/4, map.foldr/6 etc.

library/map.m:
library/tree234.m:
 	Add the new modes.

Julien.

Index: library/map.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/library/map.m,v
retrieving revision 1.128
diff -u -r1.128 map.m
--- library/map.m	15 Jan 2012 14:49:36 -0000	1.128
+++ library/map.m	14 Apr 2012 06:39:20 -0000
@@ -422,38 +422,50 @@
  :- mode map.foldr(pred(in, in, mdi, muo) is semidet, in, mdi, muo) is semidet.
  :- mode map.foldr(pred(in, in, di, uo) is semidet, in, di, uo) is semidet.
  :- mode map.foldr(pred(in, in, in, out) is cc_multi, in, in, out) is cc_multi.
-:- mode map.foldr(pred(in, in, di, uo) is cc_multi, in, di, uo) is cc_multi.
  :- mode map.foldr(pred(in, in, mdi, muo) is cc_multi, in, mdi, muo)
      is cc_multi.
+:- mode map.foldr(pred(in, in, di, uo) is cc_multi, in, di, uo) is cc_multi.

  :- pred map.foldr2(pred(K, V, A, A, B, B), map(K, V), A, A, B, B).
  :- mode map.foldr2(pred(in, in, in, out, in, out) is det,
      in, in, out, in, out) is det.
-:- mode map.foldr2(pred(in, in, in, out, in, out) is semidet,
-    in, in, out, in, out) is semidet.
+:- mode map.foldr2(pred(in, in, in, out, mdi, muo) is det,
+    in, in, out, mdi, muo) is det.
  :- mode map.foldr2(pred(in, in, in, out, di, uo) is det,
      in, in, out, di, uo) is det.
  :- mode map.foldr2(pred(in, in, di, uo, di, uo) is det,
      in, di, uo, di, uo) is det.
+:- mode map.foldr2(pred(in, in, in, out, in, out) is semidet,
+    in, in, out, in, out) is semidet.
+:- mode map.foldr2(pred(in, in, in, out, mdi, muo) is semidet,
+    in, in, out, mdi, muo) is semidet.
+:- mode map.foldr2(pred(in, in, in, out, di, uo) is semidet,
+    in, in, out, di, uo) is semidet.

  :- pred map.foldr3(pred(K, V, A, A, B, B, C, C), map(K, V), A, A, B, B, C, C).
  :- mode map.foldr3(pred(in, in, in, out, in, out, in, out) is det,
      in, in, out, in, out, in, out) is det.
-:- mode map.foldr3(pred(in, in, in, out, in, out, in, out) is semidet,
-    in, in, out, in, out, in, out) is semidet.
+:- mode map.foldr3(pred(in, in, in, out, in, out, mdi, muo) is det,
+    in, in, out, in, out, mdi, muo) is det.
  :- mode map.foldr3(pred(in, in, in, out, in, out, di, uo) is det,
      in, in, out, in, out, di, uo) is det.
  :- mode map.foldr3(pred(in, in, in, out, di, uo, di, uo) is det,
      in, in, out, di, uo, di, uo) is det.
  :- mode map.foldr3(pred(in, in, di, uo, di, uo, di, uo) is det,
      in, di, uo, di, uo, di, uo) is det.
+:- mode map.foldr3(pred(in, in, in, out, in, out, in, out) is semidet,
+    in, in, out, in, out, in, out) is semidet.
+:- mode map.foldr3(pred(in, in, in, out, in, out, mdi, muo) is semidet,
+    in, in, out, in, out, mdi, muo) is semidet.
+:- mode map.foldr3(pred(in, in, in, out, in, out, di, uo) is semidet,
+    in, in, out, in, out, di, uo) is semidet.

  :- pred map.foldr4(pred(K, V, A, A, B, B, C, C, D, D), map(K, V),
      A, A, B, B, C, C, D, D).
  :- mode map.foldr4(pred(in, in, in, out, in, out, in, out, in, out) is det,
      in, in, out, in, out, in, out, in, out) is det.
-:- mode map.foldr4(pred(in, in, in, out, in, out, in, out, in, out) is semidet,
-    in, in, out, in, out, in, out, in, out) is semidet.
+:- mode map.foldr4(pred(in, in, in, out, in, out, in, out, mdi, muo) is det,
+    in, in, out, in, out, in, out, mdi, muo) is det.
  :- mode map.foldr4(pred(in, in, in, out, in, out, in, out, di, uo) is det,
      in, in, out, in, out, in, out, di, uo) is det.
  :- mode map.foldr4(pred(in, in, in, out, in, out, di, uo, di, uo) is det,
@@ -462,6 +474,12 @@
      in, in, out, di, uo, di, uo, di, uo) is det.
  :- mode map.foldr4(pred(in, in, di, uo, di, uo, di, uo, di, uo) is det,
      in, di, uo, di, uo, di, uo, di, uo) is det.
+:- mode map.foldr4(pred(in, in, in, out, in, out, in, out, in, out) is semidet,
+    in, in, out, in, out, in, out, in, out) is semidet.
+:- mode map.foldr4(pred(in, in, in, out, in, out, in, out, mdi, muo) is semidet,
+    in, in, out, in, out, in, out, mdi, muo) is semidet.
+:- mode map.foldr4(pred(in, in, in, out, in, out, in, out, di, uo) is semidet,
+    in, in, out, in, out, in, out, di, uo) is semidet.

      % Apply a transformation predicate to all the values in a map.
      %
@@ -481,40 +499,58 @@
      % while continuously updating an accumulator.
      %
  :- pred map.map_foldl(pred(K, V, W, A, A), map(K, V), map(K, W), A, A).
-:- mode map.map_foldl(pred(in, in, out, di, uo) is det, in, out, di, uo)
-    is det.
  :- mode map.map_foldl(pred(in, in, out, in, out) is det, in, out, in, out)
      is det.
-:- mode map.map_foldl(pred(in, in, out, in, out) is semidet, in, out, in, out)
-    is semidet.
+:- mode map.map_foldl(pred(in, in, out, mdi, muo) is det, in, out, mdi, muo)
+    is det.
+:- mode map.map_foldl(pred(in, in, out, di, uo) is det, in, out, di, uo)
+    is det.
+:- mode map.map_foldl(pred(in, in, out, in, out) is semidet, in, out,
+    in, out) is semidet.
+:- mode map.map_foldl(pred(in, in, out, mdi, muo) is semidet, in, out,
+    mdi, muo) is semidet.
+:- mode map.map_foldl(pred(in, in, out, di, uo) is semidet, in, out,
+    di, uo) is semidet.

      % As map.map_foldl, but with two accumulators.
      %
  :- pred map.map_foldl2(pred(K, V, W, A, A, B, B), map(K, V), map(K, W),
      A, A, B, B).
-:- mode map.map_foldl2(pred(in, in, out, di, uo, di, uo) is det,
-    in, out, di, uo, di, uo) is det.
-:- mode map.map_foldl2(pred(in, in, out, in, out, di, uo) is det,
-    in, out, in, out, di, uo) is det.
  :- mode map.map_foldl2(pred(in, in, out, in, out, in, out) is det,
      in, out, in, out, in, out) is det.
+:- mode map.map_foldl2(pred(in, in, out, in, out, mdi, muo) is det,
+    in, out, in, out, mdi, muo) is det.
+:- mode map.map_foldl2(pred(in, in, out, in, out, di, uo) is det,
+    in, out, in, out, di, uo) is det.
+:- mode map.map_foldl2(pred(in, in, out, di, uo, di, uo) is det,
+    in, out, di, uo, di, uo) is det.
  :- mode map.map_foldl2(pred(in, in, out, in, out, in, out) is semidet,
      in, out, in, out, in, out) is semidet.
+:- mode map.map_foldl2(pred(in, in, out, in, out, mdi, muo) is semidet,
+    in, out, in, out, mdi, muo) is semidet.
+:- mode map.map_foldl2(pred(in, in, out, in, out, di, uo) is semidet,
+    in, out, in, out, di, uo) is semidet.

      % As map.map_foldl, but with three accumulators.
      %
  :- pred map.map_foldl3(pred(K, V, W, A, A, B, B, C, C), map(K, V), map(K, W),
      A, A, B, B, C, C).
+:- mode map.map_foldl3(pred(in, in, out, in, out, in, out, in, out) is det,
+    in, out, in, out, in, out, in, out) is det.
+:- mode map.map_foldl3(pred(in, in, out, in, out, in, out, mdi, muo) is det,
+    in, out, in, out, in, out, mdi, muo) is det.
  :- mode map.map_foldl3(pred(in, in, out, di, uo, di, uo, di, uo) is det,
      in, out, di, uo, di, uo, di, uo) is det.
-:- mode map.map_foldl3(pred(in, in, out, in, out, di, uo, di, uo) is det,
-    in, out, in, out, di, uo, di, uo) is det.
  :- mode map.map_foldl3(pred(in, in, out, in, out, in, out, di, uo) is det,
      in, out, in, out, in, out, di, uo) is det.
-:- mode map.map_foldl3(pred(in, in, out, in, out, in, out, in, out) is det,
-    in, out, in, out, in, out, in, out) is det.
+:- mode map.map_foldl3(pred(in, in, out, in, out, di, uo, di, uo) is det,
+    in, out, in, out, di, uo, di, uo) is det.
  :- mode map.map_foldl3(pred(in, in, out, in, out, in, out, in, out) is semidet,
      in, out, in, out, in, out, in, out) is semidet.
+:- mode map.map_foldl3(pred(in, in, out, in, out, in, out, mdi, muo) is semidet,
+    in, out, in, out, in, out, mdi, muo) is semidet.
+:- mode map.map_foldl3(pred(in, in, out, in, out, in, out, di, uo) is semidet,
+    in, out, in, out, in, out, di, uo) is semidet.

      % As map.map_foldl, but without passing the key to the predicate.
      %
Index: library/tree234.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/library/tree234.m,v
retrieving revision 1.75
diff -u -r1.75 tree234.m
--- library/tree234.m	17 Jan 2012 15:49:45 -0000	1.75
+++ library/tree234.m	14 Apr 2012 06:41:43 -0000
@@ -247,34 +247,46 @@
  :- pred tree234.foldr2(pred(K, V, A, A, B, B), tree234(K, V), A, A, B, B).
  :- mode tree234.foldr2(pred(in, in, in, out, in, out) is det,
      in, in, out, in, out) is det.
-:- mode tree234.foldr2(pred(in, in, in, out, in, out) is semidet,
-    in, in, out, in, out) is semidet.
+:- mode tree234.foldr2(pred(in, in, in, out, mdi, muo) is det,
+    in, in, out, mdi, muo) is det.
  :- mode tree234.foldr2(pred(in, in, in, out, di, uo) is det,
      in, in, out, di, uo) is det.
  :- mode tree234.foldr2(pred(in, in, di, uo, di, uo) is det,
      in, di, uo, di, uo) is det.
+:- mode tree234.foldr2(pred(in, in, in, out, in, out) is semidet,
+    in, in, out, in, out) is semidet.
+:- mode tree234.foldr2(pred(in, in, in, out, mdi, muo) is semidet,
+    in, in, out, mdi, muo) is semidet.
+:- mode tree234.foldr2(pred(in, in, in, out, di, uo) is semidet,
+    in, in, out, di, uo) is semidet.

  :- pred tree234.foldr3(pred(K, V, A, A, B, B, C, C), tree234(K, V),
  	A, A, B, B, C, C).
  :- mode tree234.foldr3(pred(in, in, in, out, in, out, in, out) is det,
      in, in, out, in, out, in, out) is det.
-:- mode tree234.foldr3(pred(in, in, in, out, in, out, in, out) is semidet,
-    in, in, out, in, out, in, out) is semidet.
+:- mode tree234.foldr3(pred(in, in, in, out, in, out, mdi, muo) is det,
+    in, in, out, in, out, mdi, muo) is det.
  :- mode tree234.foldr3(pred(in, in, in, out, in, out, di, uo) is det,
      in, in, out, in, out, di, uo) is det.
  :- mode tree234.foldr3(pred(in, in, in, out, di, uo, di, uo) is det,
      in, in, out, di, uo, di, uo) is det.
  :- mode tree234.foldr3(pred(in, in, di, uo, di, uo, di, uo) is det,
      in, di, uo, di, uo, di, uo) is det.
+:- mode tree234.foldr3(pred(in, in, in, out, in, out, in, out) is semidet,
+    in, in, out, in, out, in, out) is semidet.
+:- mode tree234.foldr3(pred(in, in, in, out, in, out, mdi, muo) is semidet,
+    in, in, out, in, out, mdi, muo) is semidet.
+:- mode tree234.foldr3(pred(in, in, in, out, in, out, di, uo) is semidet,
+    in, in, out, in, out, di, uo) is semidet.

  :- pred tree234.foldr4(pred(K, V, A, A, B, B, C, C, D, D), tree234(K, V),
  	A, A, B, B, C, C, D, D).
  :- mode tree234.foldr4(pred(in, in, in, out, in, out, in, out, in, out)
  	is det,
  	in, in, out, in, out, in, out, in, out) is det.
-:- mode tree234.foldr4(pred(in, in, in, out, in, out, in, out, in, out)
-	is semidet,
-	in, in, out, in, out, in, out, in, out) is semidet.
+:- mode tree234.foldr4(pred(in, in, in, out, in, out, in, out, mdi, muo)
+    is det,
+	in, in, out, in, out, in, out, mdi, muo) is det.
  :- mode tree234.foldr4(pred(in, in, in, out, in, out, in, out, di, uo) is det,
  	in, in, out, in, out, in, out, di, uo) is det.
  :- mode tree234.foldr4(pred(in, in, in, out, in, out, di, uo, di, uo) is det,
@@ -283,6 +295,15 @@
  	in, in, out, di, uo, di, uo, di, uo) is det.
  :- mode tree234.foldr4(pred(in, in, di, uo, di, uo, di, uo, di, uo) is det,
  	in, di, uo, di, uo, di, uo, di, uo) is det.
+:- mode tree234.foldr4(pred(in, in, in, out, in, out, in, out, in, out)
+	is semidet,
+	in, in, out, in, out, in, out, in, out) is semidet.
+:- mode tree234.foldr4(pred(in, in, in, out, in, out, in, out, mdi, muo)
+	is semidet,
+	in, in, out, in, out, in, out, mdi, muo) is semidet.
+:- mode tree234.foldr4(pred(in, in, in, out, in, out, in, out, di, uo)
+	is semidet,
+	in, in, out, in, out, in, out, di, uo) is semidet.

  :- func tree234.map_values(func(K, V) = W, tree234(K, V)) = tree234(K, W).

@@ -298,37 +319,57 @@

  :- pred tree234.map_foldl(pred(K, V, W, A, A), tree234(K, V), tree234(K, W),
      A, A).
-:- mode tree234.map_foldl(pred(in, in, out, di, uo) is det,
-    in, out, di, uo) is det.
  :- mode tree234.map_foldl(pred(in, in, out, in, out) is det,
      in, out, in, out) is det.
+:- mode tree234.map_foldl(pred(in, in, out, mdi, muo) is det,
+    in, out, mdi, muo) is det.
+:- mode tree234.map_foldl(pred(in, in, out, di, uo) is det,
+    in, out, di, uo) is det.
  :- mode tree234.map_foldl(pred(in, in, out, in, out) is semidet,
      in, out, in, out) is semidet.
+:- mode tree234.map_foldl(pred(in, in, out, mdi, muo) is semidet,
+    in, out, mdi, muo) is semidet.
+:- mode tree234.map_foldl(pred(in, in, out, di, uo) is semidet,
+    in, out, di, uo) is semidet.

  :- pred tree234.map_foldl2(pred(K, V, W, A, A, B, B),
      tree234(K, V), tree234(K, W), A, A, B, B).
+:- mode tree234.map_foldl2(pred(in, in, out, in, out, in, out) is det,
+    in, out, in, out, in, out) is det.
+:- mode tree234.map_foldl2(pred(in, in, out, in, out, mdi, muo) is det,
+    in, out, in, out, mdi, muo) is det.
  :- mode tree234.map_foldl2(pred(in, in, out, di, uo, di, uo) is det,
      in, out, di, uo, di, uo) is det.
  :- mode tree234.map_foldl2(pred(in, in, out, in, out, di, uo) is det,
      in, out, in, out, di, uo) is det.
-:- mode tree234.map_foldl2(pred(in, in, out, in, out, in, out) is det,
-    in, out, in, out, in, out) is det.
  :- mode tree234.map_foldl2(pred(in, in, out, in, out, in, out) is semidet,
      in, out, in, out, in, out) is semidet.
+:- mode tree234.map_foldl2(pred(in, in, out, in, out, mdi, muo) is semidet,
+    in, out, in, out, mdi, muo) is semidet.
+:- mode tree234.map_foldl2(pred(in, in, out, in, out, di, uo) is semidet,
+    in, out, in, out, di, uo) is semidet.

  :- pred tree234.map_foldl3(pred(K, V, W, A, A, B, B, C, C),
      tree234(K, V), tree234(K, W), A, A, B, B, C, C).
+:- mode tree234.map_foldl3(pred(in, in, out, in, out, in, out, in, out) is det,
+    in, out, in, out, in, out, in, out) is det.
+:- mode tree234.map_foldl3(pred(in, in, out, in, out, in, out, mdi, muo) is det,
+    in, out, in, out, in, out, mdi, muo) is det.
  :- mode tree234.map_foldl3(pred(in, in, out, di, uo, di, uo, di, uo) is det,
      in, out, di, uo, di, uo, di, uo) is det.
  :- mode tree234.map_foldl3(pred(in, in, out, in, out, di, uo, di, uo) is det,
      in, out, in, out, di, uo, di, uo) is det.
  :- mode tree234.map_foldl3(pred(in, in, out, in, out, in, out, di, uo) is det,
      in, out, in, out, in, out, di, uo) is det.
-:- mode tree234.map_foldl3(pred(in, in, out, in, out, in, out, in, out) is det,
-    in, out, in, out, in, out, in, out) is det.
  :- mode tree234.map_foldl3(pred(in, in, out, in, out, in, out, in, out)
      is semidet,
      in, out, in, out, in, out, in, out) is semidet.
+:- mode tree234.map_foldl3(pred(in, in, out, in, out, in, out, mdi, muo)
+    is semidet,
+    in, out, in, out, in, out, mdi, muo) is semidet.
+:- mode tree234.map_foldl3(pred(in, in, out, in, out, in, out, di, uo)
+    is semidet,
+    in, out, in, out, in, out, di, uo) is semidet.

  :- pred tree234.map_values_foldl(pred(V, W, A, A),
      tree234(K, V), tree234(K, W), A, A).

--------------------------------------------------------------------------
mercury-reviews mailing list
Post messages to:       mercury-reviews at csse.unimelb.edu.au
Administrative Queries: owner-mercury-reviews at csse.unimelb.edu.au
Subscriptions:          mercury-reviews-request at csse.unimelb.edu.au
--------------------------------------------------------------------------



More information about the reviews mailing list