[m-rev.] for post-commit review: add missing from_list/1 and from_sorted_list/1 synonyms

Julien Fischer jfischer at opturion.com
Sun Mar 9 01:37:45 AEDT 2025


For post-commit review.

The documentation and NEW file are the only (mildly) interesting bit.

--------------------------------

Add missing from_list/1 and from_sorted_list/1 synonyms.

library/diet.m:
library/fat_sparse_bitset.m:
library/fatter_sparse_bitset.m:
library/set_ctree234.m:
library/set_tree234.m:
library/sparse_bitset.m:
library/tree_bitset.m:
    Add the above functions where they are missing.

library/set.m:
library/set_bbbtree.m:
    Adjust some documentation.

NEWS.md:
    Announce the above additions.

Julien.

diff --git a/NEWS.md b/NEWS.md
index c77b589..55d5d8b 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -219,8 +219,9 @@ Changes to the Mercury standard library

 ### Changes to the `diet` module

-* The following predicate has been added:
+* The following function and predicate have been added:

+    - func `from_sorted_list/1`
     - pred `nondet_member/2`

 * The following obsolete predicate has been removed:
@@ -281,8 +282,10 @@ Changes to the Mercury standard library
     - func `sorted_list_to_set/1`
     - pred `sorted_list_to_set/2`

-* The following predicate has been added:
+* The following functions and predicate have been added:

+    - func `from_list/1`
+    - func `from_sorted_list/1`
     - pred `nondet_member/1`

 * The following obsolete predicate has been removed:
@@ -864,8 +867,9 @@ Changes to the Mercury standard library

 ### Changes to the `set_ctree234` module

-* The following predicate has been added:
+* The following function and predicate have been added:

+    - func `from_sorted_list/1`
     - pred `nondet_member/2`

 * The following predicate has been marked obsolete:
@@ -890,8 +894,9 @@ Changes to the Mercury standard library

 ### Changes to the `set_tree234` module

-* The following predicate has been added:
+* The following function and predicate have been added:

+    - func `from_osrted_list/1`
     - pred `nondet_member/2`

 * The following obsolete predicates have been removed:
@@ -922,8 +927,10 @@ Changes to the Mercury standard library
      `uenum` typeclass, replacing the earlier requirement that it be
      a member of the `enum` typeclass.

-* The following predicate has been added:
+* The following functions and predicate have been added:

+    - func `from_list/1`
+    - func `from_sorted_list/`
     - pred `nondet_member/2`

 * The following obsolete predicate has been removed:
@@ -1244,8 +1251,10 @@ Changes to the Mercury standard library

 ### Changes to the `tree_bitset` module

-* The following predicates have been added:
+* The following functions and predicates have been added:

+    - func `from_list/1`
+    - func `from_sorted_list/1`
     - pred `nondet_member/2`
     - pred `remove_leq/3`
     - pred `remove_gt/3`
diff --git a/library/diet.m b/library/diet.m
index fd41483..584546f 100644
--- a/library/diet.m
+++ b/library/diet.m
@@ -280,6 +280,10 @@
 :- pred sorted_list_to_set(list(T)::in, diet(T)::out) is det
     <= diet_element(T).

+    % A synonym for sorted_list_to_set/1.
+    %
+:- func from_sorted_list(list(T)) = diet(T) <= diet_element(T).
+
 %---------------------------------------------------------------------------%
 %
 % Converting sets to lists.
@@ -1540,11 +1544,14 @@ from_list(List, Set) :-
 from_interval_list(List, Set) :-
     list.foldl(insert_interval, List, init, Set).

-sorted_list_to_set(List) = Set :-
-    sorted_list_to_set(List, Set).
+sorted_list_to_set(SortedList) = Set :-
+    sorted_list_to_set(SortedList, Set).

-sorted_list_to_set(List, Set) :-
-    list_to_set(List, Set).
+sorted_list_to_set(SortedList, Set) :-
+    list_to_set(SortedList, Set).
+
+from_sorted_list(SortedList) = Set :-
+    sorted_list_to_set(SortedList, Set).

 %---------------------------------------------------------------------------%

diff --git a/library/fat_sparse_bitset.m b/library/fat_sparse_bitset.m
index 88f52c2..dcd00bb 100644
--- a/library/fat_sparse_bitset.m
+++ b/library/fat_sparse_bitset.m
@@ -303,6 +303,10 @@
 :- func list_to_set(list(T)) = fat_sparse_bitset(T) <= uenum(T).
 :- pred list_to_set(list(T)::in, fat_sparse_bitset(T)::out) is det <= uenum(T).

+    % A synonym for list_to_set/1.
+    %
+:- func from_list(list(T)) = fat_sparse_bitset(T) <= uenum(T).
+
     % sorted_list_to_set(List) returns a set containing only the members
     % of List. List must be sorted *on the enum values of the items*.
     % If the to_uint method of uenum(T) preserves order, then this is
@@ -315,6 +319,10 @@
 :- pred sorted_list_to_set(list(T)::in, fat_sparse_bitset(T)::out)
     is det <= uenum(T).

+    % A synonym for sorted_list_to_set/1.
+    %
+:- func from_sorted_list(list(T)) = fat_sparse_bitset(T) <= uenum(T).
+
 %---------------------------------------------------------------------------%
 %
 % Converting sets to lists.
@@ -1495,6 +1503,11 @@ reverse_bitset_elems_acc(bitset_cons(XOffset,
XBits, Xs), Ys, Zs) :-

 %---------------------%

+from_list(ItemList) = Set :-
+    list_to_set(ItemList, Set).
+
+%---------------------%
+
 sorted_list_to_set(SortedList) = Set :-
     sorted_list_to_set(SortedList, Set).

@@ -1545,6 +1558,11 @@ sorted_list_to_set_loop(Item1, [Item2 | Items],
Offset, Bits, Tail) :-

 %---------------------%

+from_sorted_list(SortedList) = Set :-
+    sorted_list_to_set(SortedList, Set).
+
+%---------------------%
+
 to_sorted_list(Set) = SortedList :-
     to_sorted_list(Set, SortedList).

diff --git a/library/fatter_sparse_bitset.m b/library/fatter_sparse_bitset.m
index ea763da..71cb6b2 100644
--- a/library/fatter_sparse_bitset.m
+++ b/library/fatter_sparse_bitset.m
@@ -374,6 +374,10 @@
 :- pred list_to_set(list(T)::in, fatter_sparse_bitset(T)::out) is det
     <= uenum(T).

+    % A synonym for list_to_set/1.
+    %
+:- func from_list(list(T)) = fatter_sparse_bitset(T) <= uenum(T).
+
     % sorted_list_to_set(List) returns a set containing only the members
     % of List. List must be sorted. Takes O(length(List)) time and space.
     %
@@ -381,6 +385,10 @@
 :- pred sorted_list_to_set(list(T)::in, fatter_sparse_bitset(T)::out)
     is det <= uenum(T).

+    % A synonym for sorted_list_to_set/1.
+    %
+:- func from_sorted_list(list(T)) = fatter_sparse_bitset(T) <= uenum(T).
+
 %---------------------------------------------------------------------------%
 %
 % Converting sets to lists.
@@ -1629,6 +1637,11 @@ reverse_bitset_elems_acc(bitset_cons(XOffset,
XBitsLo, XBitsHi, Xs), Ys, Zs) :-

 %---------------------%

+from_list(ItemList) = Set :-
+    list_to_set(ItemList, Set).
+
+%---------------------%
+
 sorted_list_to_set(SortedList) = Set :-
     sorted_list_to_set(SortedList, Set).

@@ -1683,6 +1696,11 @@ sorted_list_to_set_loop(Item1, [Item2 | Items],
Offset, BitsLo, BitsHi,

 %---------------------%

+from_sorted_list(SortedList) = Set :-
+    sorted_list_to_set(SortedList, Set).
+
+%---------------------%
+
 to_sorted_list(Set) = SortedList :-
     to_sorted_list(Set, SortedList).

diff --git a/library/set.m b/library/set.m
index 652d83d..f5c063b 100644
--- a/library/set.m
+++ b/library/set.m
@@ -266,7 +266,7 @@
 :- func list_to_set(list(T)) = set(T).
 :- pred list_to_set(list(T)::in, set(T)::out) is det.

-    % Synonym for list_to_set/1.
+    % A synonym for list_to_set/1.
     %
 :- func from_list(list(T)) = set(T).

diff --git a/library/set_bbbtree.m b/library/set_bbbtree.m
index f15d37a..13054e5 100644
--- a/library/set_bbbtree.m
+++ b/library/set_bbbtree.m
@@ -258,7 +258,7 @@
 :- func list_to_set(list(T)) = set_bbbtree(T).
 :- pred list_to_set(list(T)::in, set_bbbtree(T)::out) is det.

-    % A synonym for set_bbtree.list_to_set/1.
+    % A synonym for list_to_set/1.
     %
 :- func from_list(list(T)) = set_bbbtree(T).

diff --git a/library/set_ctree234.m b/library/set_ctree234.m
index 24d9152..2bd4983 100644
--- a/library/set_ctree234.m
+++ b/library/set_ctree234.m
@@ -272,6 +272,9 @@
     % `from_list' is a synonym for `list_to_set'.
     %
 :- func list_to_set(list(T)) = set_ctree234(T).
+
+    % A synonym for list_to_set/1.
+    %
 :- func from_list(list(T)) = set_ctree234(T).

     % sorted_list_to_set(List) = Set is true iff Set is the set
@@ -280,6 +283,10 @@
     %
 :- func sorted_list_to_set(list(T)) = set_ctree234(T).

+    % A synonym for sorted_list_to_set/1.
+    %
+:- func from_sorted_list(list(T)) = set_ctree234(T).
+
     % rev_sorted_list_to_set(List) = Set is true iff Set is the set
     % containing only the members of List. List must be sorted
     % in descending order and must not contain any duplicates.
@@ -2693,6 +2700,11 @@ do_from_sorted_list(Len, !List, Level0,
AllThrees0, Tree) :-

 %---------------------%

+from_sorted_list(SortedList) =
+    sorted_list_to_set(SortedList).
+
+%---------------------%
+
 rev_sorted_list_to_set(List) = ct(Len, Tree) :-
     list.length(List, Len),
     ( if Len = 0 then
diff --git a/library/set_tree234.m b/library/set_tree234.m
index c7c58fc..ebd3239 100644
--- a/library/set_tree234.m
+++ b/library/set_tree234.m
@@ -268,6 +268,10 @@
 :- func sorted_list_to_set(list(T)) = set_tree234(T).
 :- pred sorted_list_to_set(list(T)::in, set_tree234(T)::out) is det.

+    % A synonym for sorted_list_to_set/1.
+    %
+:- func from_sorted_list(list(T)) = set_tree234(T).
+
     % rev_sorted_list_to_set(List) = Set is true iff Set is the set
     % containing only the members of List. List must be sorted
     % in descending order and must not contain duplicates.
@@ -2737,6 +2741,11 @@ do_from_sorted_list(Len, !List, Level0,
AllThrees0, Tree) :-

 %---------------------%

+from_sorted_list(SortedList) = Set :-
+    sorted_list_to_set(SortedList, Set).
+
+%---------------------%
+
 rev_sorted_list_to_set(List) = Tree :-
     rev_sorted_list_to_set(List, Tree).

diff --git a/library/sparse_bitset.m b/library/sparse_bitset.m
index 978c585..c3f638b 100644
--- a/library/sparse_bitset.m
+++ b/library/sparse_bitset.m
@@ -313,6 +313,10 @@
 :- func list_to_set(list(T)) = sparse_bitset(T) <= uenum(T).
 :- pred list_to_set(list(T)::in, sparse_bitset(T)::out) is det <= uenum(T).

+    % A synonym for list_to_set/1.
+    %
+:- func from_list(list(T)) = sparse_bitset(T) <= uenum(T).
+
     % sorted_list_to_set(List) returns a set containing only the members
     % of List. List must be sorted *on the enum values of the items*.
     % If the to_uint method of uenum(T) preserves order, then this is
@@ -325,6 +329,10 @@
 :- pred sorted_list_to_set(list(T)::in, sparse_bitset(T)::out)
     is det <= uenum(T).

+    % A synonym for sorted_list_to_set/1.
+    %
+:- func from_sorted_list(list(T)) = sparse_bitset(T) <= uenum(T).
+
 %---------------------------------------------------------------------------%
 %
 % Converting sets to lists.
@@ -1502,6 +1510,11 @@ list_to_set_get_descending_run(Offset0, Bits0,
Items @ [HeadItem | TailItems],

 %---------------------%

+from_list(List) = Set :-
+    list_to_set(List, Set).
+
+%---------------------%
+
 sorted_list_to_set(SortedList) = Set :-
     sorted_list_to_set(SortedList, Set).

@@ -1552,6 +1565,11 @@ sorted_list_to_set_loop(Item1, [Item2 | Items],
Offset, Bits, Tail) :-

 %---------------------%

+from_sorted_list(SortedList) = Set :-
+    sorted_list_to_set(SortedList, Set).
+
+%---------------------%
+
 to_sorted_list(Set) = SortedList :-
     to_sorted_list(Set, SortedList).

diff --git a/library/tree_bitset.m b/library/tree_bitset.m
index ff2c406..8a7e2dc 100644
--- a/library/tree_bitset.m
+++ b/library/tree_bitset.m
@@ -288,6 +288,10 @@
 :- func list_to_set(list(T)) = tree_bitset(T) <= uenum(T).
 :- pred list_to_set(list(T)::in, tree_bitset(T)::out) is det <= uenum(T).

+    % A synonym for list_to_set/1.
+    %
+:- func from_list(list(T)) = tree_bitset(T) <= uenum(T).
+
     % sorted_list_to_set(List) returns a set containing only the members
     % of List. List must be sorted *on the enum values of the items*.
     % If the to_uint method of uenum(T) preserves order, then this is
@@ -300,6 +304,10 @@
 :- pred sorted_list_to_set(list(T)::in, tree_bitset(T)::out) is det
     <= uenum(T).

+    % A synonym for sorted_list_to_set/1.
+    %
+:- func from_sorted_list(list(T)) = tree_bitset(T) <= uenum(T).
+
 %---------------------------------------------------------------------------%
 %
 % Converting sets to lists.
@@ -3511,6 +3519,9 @@ list_to_set(List) = sorted_list_to_set(list.sort(List)).
 list_to_set(List, Set) :-
     Set = list_to_set(List).

+from_list(List) = Set :-
+    Set = list_to_set(List).
+
 %---------------------%

 sorted_list_to_set(Elems) = Set :-
@@ -3541,6 +3552,9 @@ sorted_list_to_set(Elems) = Set :-
 sorted_list_to_set(List, Set) :-
     Set = sorted_list_to_set(List).

+from_sorted_list(List) = Set :-
+    Set = sorted_list_to_set(List).
+
 :- pred items_to_index(list(T)::in, list(uint)::out) is det <= uenum(T).
 :- pragma type_spec(pred(items_to_index/2), T = var(_)).
 :- pragma type_spec(pred(items_to_index/2), T = int).


More information about the reviews mailing list