|TkN 55.5.0+dev0-2025-04-28/$List!tA;!a@@A"[]@@5../../stdlib/list.mlihh@@$ListA@"::B@$list!B@@@@@@hh@@B@@@A.B@@@@Y@@@@@'h@@@@%@@A@&length@"!a@B@@@@#int@@@@@@Ck  Dk (@@BC@@/compare_lengths@?!a@B@@@@@M!b@B@@@@+@@@@@@@@mnkknnk@@lD@@3compare_length_with@i!a@B@@@@@I@@@N@@@@@@@@u v vu v @@E@@(is_empty@!a@B@@@@$bool@@@@@@|  |  @@F@@$cons@!a@B@@ @@@@@@@@@@@B , ,B , O@@G@@)singleton@!a@B@ @@@@@@G  G  @@H@@"hd@!a@B@@@@@@@L  L  @@I@@"tl@!a@ B@@@@ @@@@@@Q r rQ r @@J@@#nth@!a@B@ @@@ @@@@ @@@@@5V  6V  @@4K@@'nth_opt@1!a@B@@@@@@@@&optionL@@@@@@@@Z]  [] @@YL@@#rev@V !a@#B@@@@bà @@@ @@!@wexe@@vM@@$init @E@@@$@@N@@@%!a@-B@&@@'Ơ @@@)@@*@@+@hh=@@N@@&append!@Ǡ!a@8B@.@@@0@Ƞ@@@2ɠ@@@4@@5@@6@nn@@O@@*rev_append"@ʠ!a@CB@9@@@;@ˠ@@@=̠@@@?@@@@@A@tt@@P@@&concat#@Π͠!a@MB@D@@@F@@@HϠ @@@J@@K@ y'' y'K@@Q@@'flatten$@Ѡ Р!a@WB@N@@@P@@@RҠ @@@T@@U@,,,-,Q@@+R@@%equal%@@!a@eB@X@@@@Y@@Z@@[@9Ԡ@@@]@Aՠ@@@_@@@`@@a@@b@@c@[\@@ZS@@'compare&@@!a@sB@f@3@@@g@@h@@i@hؠ@@@k@p٠@@@mH@@@n@@o@@p@@q@@@T@@$iter'@@!a@}B@t$unit@@@u@@v@ܠ@@@x@@@y@@z@@{@/@@U@@%iteri(@@@@@~@!a@B@-@@@@@@@@@@@:@@@@@@@@@@V@@#map)@@!a@B@!b@B@@@@@@@@@@@@@@@@@W@@$mapi*@@@@@@!a@B@!b@B@@@@@@@@@@@@@@@@@1__2_@@0X@@'rev_map+@@!a@B@!b@B@@@@=@@@C@@@@@@@@XHHYHv@@WY@@*filter_map,@@!a@B@!b@B@@@@@@@i@@@o@@@@@@@@@@Z@@*concat_map-@@!a@B@!b@B@@@@@@@@@@@@@@@@@@@@[@@-fold_left_map.@@#acc@B@@!a@B@@@!b@B@@@@@@@@@@@@@(@@@@@@@@@@@@@qq@@\@@)fold_left/@@#acc@B@@!a@B@@@@@@@@@@@@@@@@@OOO@@]@@*fold_right0@@!a@B@@#acc@B@@@@@@!@@@@@@@@@@@89$@@7^@@%iter21@@!a@ B@@!b@B@@@@@@@@@K@@@@S@@@@@@@@ @@ @@ @mn@@l_@@$map22@@!a@B@@!b@!B@!c@#B@@@@@@@@@@@@@@@@@@@@@@@@@`@@(rev_map23@@!a@3B@$@!b@5B@%!c@7B@&@@'@@(@@@@*@@@@,@@@.@@/@@0@@1@    @@a@@*fold_left24@@#acc@IB@8@!a@GB@9@!b@KB@:@@;@@<@@=@@@@@?@@@@A(@@B@@C@@D@@E@!6!6!G!@@b@@+fold_right25@@!a@[B@L@!b@_B@M@#acc@]B@N@@O@@P@@Q@&@@@S@.@@@U@@@V@@W@@X@@Y@E"P"PF"b"@@Dc@@'for_all6@@!a@iB@`@@@a@@b@P@@@d@@@e@@f@@g@j##k##@@id@@&exists7@@!a@sB@j@@@k@@l@u@@@n@@@o@@p@@q@$$$$@@e@@(for_all28@@!a@B@t@!b@B@u@@@v@@w@@x@@@@z@@@@| @@@}@@~@@@@@%%%%@@f@@'exists29@@!a@B@@!b@B@8 @@@@@@@@ @@@@ @@@M @@@@@@@@@@%&&%&&@@g@@#mem:@!a@B@@ @@@k@@@@@@@@+'_'_+'_'~@@h@@$memq;@!a@B@@ @@@@@@@@@@@50''60''@@4i@@$find<@@!a@B@@@@@@@@@@@@@@@@U9((V9((@@Tj@@(find_opt=@@!a@B@@@@@@@`@@@"@@@@@@@@z@)])]{@)])@@yk@@*find_index>@@!a@B@@@@@@@@@@Ga@@@@@@@@@@@H*Q*QH*Q*@@l@@(find_map?@@!a@B@d!b@B@@@@@@@@@@w@@@@@@@@P+i+iP+i+@@m@@)find_mapi@@@@@@@!a@B@!b@B@@@@@@@@@@@@@@@@@@@@W,J,JW,J,@@n@@&filterA@@!a@B@m@@@@@@ @@@@@@@@@@@'^-E-E(^-E-t@@&o@@(find_allB@@!a@B@@@@@@@2 @@@8!@@@@@@@@Md..Nd..E@@Lp@@'filteriC@@"@@@@!a@B@#@@@@@@@@_$@@@e%@@@@@@@@zh.y.y{h.y.@@yq@@$takeD@H&@@@ @}'!a@B@ @@@ ( @@@@@@@@s//s//@@r@@$dropE@l)@@@@*!a@B@@@@+ @@@@@@@@}0q0q}0q0@@s@@*take_whileF@@!a@'B@.,@@@@@@-@@@!.@@@#@@$@@%@1T1T1T1@@t@@*drop_whileG@@!a@2B@(T/@@@)@@*@0@@@,1@@@.@@/@@0@2222A@@ u@@)partitionH@@!a@@B@3z2@@@4@@5@3@@@7@#4@@@9@+5$@@@;@@<@@=@@>@@22A23@@?v@@-partition_map[@@!a@ /B@A&Stdlib6&Either!t!b@ 1B@ !c@ 3B@ @@@ #@@ $@^7%@@@ &@h8@@@ (@p9 @@@ *@@ +@@ ,@@ -@4141414~@@w@@%assoc\@!a@ B@ 5@@ 6@@@ 8@@ 9@@ :@6666@@x@@)assoc_opt]@!a@ IB@ ?@;@@!b@ KB@ @@@ A@@@ C| @@@ E@@ F@@ G@7777@@y@@$assq^@!a@ TB@ L@<@@!b@ VB@ M@@ N@@@ P@@ Q@@ R@9/9/9/9T@@z@@(assq_opt_@!a@ aB@ W@=@@!b@ cB@ X@@ Y@@@ [ˠ @@@ ]@@ ^@@ _@ #99 $99@@ "{@@)mem_assoc`@!a@ mB@ d@ '>@@!b@ oB@ e@@ f@@@ h?@@@ i@@ j@@ k@ M:k:k N:k:@@ L|@@(mem_assqa@!a@ yB@ p@ Q@@@!b@ {B@ q@@ r@@@ tA@@@ u@@ v@@ w@ w;; x;;C@@ v}@@,remove_assocb@!a@ B@ |@ {B@@!b@ B@ }@@ ~@@@  C@#@@@ @@@ @@ @@ @ ;; ;;@@ ~@@+remove_assqc@!a@ B@ @ D@@!b@ B@ @@ @@@  E@#@@@ @@@ @@ @@ @ > @>>@@@ >A@@$sortf@@!a@ B@ @ L@@@ @@ @@ @ LM@@@  RN@@@ @@ @@ @ g?5?5 h?5?g@@ fB@@+stable_sortg@@!a@ B@ @ ?O@@@ @@ @@ @ tP@@@  zQ@@@ @@ @@ @  BB  BB=@@ C@@)fast_sorth@@!a@ B@ @ gR@@@ @@ @@ @ S@@@  T@@@ @@ @@ @ CGCG CGC~@@ D@@)sort_uniqi@@!a@ B@ @ U@@@ @@ @@ @ V@@@  W@@@ @@ @@ @ CC CD @@ E@@%mergej@@!a@ B@ @ X@@@ @@ @@ @ Y@@@ @ Z@@@  ["@@@ @@ @@ @@ @  DD  DE)@@ F@@&to_seq@ \!a@ B@ @@@ &Stdlib]#Seq!t@@@ @@ @ 1,FF 2,FF@@ 0G@@&of_seq@&Stdlib^#Seq!t!a@ 'B@ @@@ " >_ @@@ $@@ %@ S1GG T1GG/@@ RH@@@30List operations.@  Some functions are flagged as not tail-recursive. A tail-recursive function uses constant stack space, while a non-tail-recursive function uses stack space proportional to the length of its list argument, which can be a problem with very long lists. When the function takes several list arguments, an approximate formula giving stack usage (in some unspecified constant unit) is shown in parentheses.@ n The above considerations can usually be ignored if your lists are not longer than about 10000 elements.@ J The labeled version of this module can be used as described in the )StdLabels@@( module.@@@@@@@@@@@@A5../../stdlib/list.mli#&List.t3?An alias for the type of lists.@@@@@@@@@@@@ Y@ @@@$(::) z x@@@@A l@ d r@@+List.length3 9Return the length (number of elements) of the given list.@@@@@@@@@@@@ g@  i@@@@ Y4List.compare_lengths3 "Compare the lengths of two lists. 5compare_lengths l1 l25 is equivalent to ?compare (length l1) (length l2) S, except that the computation stops after reaching the end of the shortest list.@@@@$4.05@@@@@@@ h@ i@! ^@@@@ O8List.compare_length_with3 ,Compare the length of a list to an integer. 9compare_length_with l len5 is equivalent to 6compare (length l) len 5, except that the computation stops after at most #len8 iterations on the list.@@@@$4.05@@@@@@@ d@D e@G Z@@@@ R-List.is_empty3*is_empty l8 is true if and only if !l * has no elements. It is equivalent to ;compare_length_with l 0 = 0!.@@@@#5.1@@@@@@@ d@g e@@@@ U)List.cons3)cons x xs$ is 'x :: xs@@@@94.03 (4.05 in ListLabels)@@@@@@@ ^@~ _@ Z@@@@ P.List.singleton3+singleton x> returns the one-element list #[x]!.@@@@#5.4@@@@@@@ \@ ]@@@@ S'List.hd3 +Return the first element of the given list.@@@@@@@@'Failure5if the list is empty.@@@@@ Z@ [@@@@ Q'List.tl3 0Return the given list without its first element.@@@@@@@@'Failure5if the list is empty.@@@@@ X@ Y@@@@ I(List.nth3+Return the !n X-th element of the given list. The first element (head of the list) is at position 0.@@@@@@@@'Failure9if the list is too short.@0Invalid_argument#if !n- is negative.@@@@@ b@ c@ X@@@@ U,List.nth_opt3+Return the !n e-th element of the given list. The first element (head of the list) is at position 0. Return $None: if the list is too short.@@@@$4.05@@@0Invalid_argument#if !n- is negative.@@@@@ p@ q@ f@@@@ \(List.rev3.List reversal.@@@@@@@@@@@@ ]@* ^@@@@ N)List.init3*init len f$ is :[f 0; f 1; ...; f (len-1)]:, evaluated left to right.@@@@$4.06@@@0Invalid_argument#if 'len < 0!.@@@@@ f@P g@S c@@@@ R+List.append3,append l0 l1) appends "l1$ to "l0 +. Same function as the infix operator !@!.@@@@ $5.1 this function is tail-recursive.@@@@@@@ j@y k@| `@@@@ V/List.rev_append30rev_append l1 l2* reverses "l1: and concatenates it with "l2;. This is equivalent to !(|D@) l1) @ l2!.@@@@@@@@@@@@ r@ s@ h@@@@ ^+List.concat3 Concatenate a list of lists. The elements of the argument are all concatenated together (in the same order) to give the result. Not tail-recursive (length of the argument + length of the longest sub-list).@@@@@@@@@@@@ _@ `@@@@ J,List.flatten3(Same as D@ R. Not tail-recursive (length of the argument + length of the longest sub-list).@@@@@@@@@@@@ Q@ R@@@@ 'a -> int. interface as .Stdlib.compare@@!:@(a1 :: l11 is smaller than (a2 :: l2< (negative result) if "a11 is smaller than "a2 ,, or if they are equal (0 result) and "l11 is smaller than "l2@/the empty list "[] ) is strictly smaller than non-empty lists@@/ Note: the #cmp F function will be called even if the lists have different lengths.@@@@$4.12@@@@@@@ @h @k @n @@@@ A@)Iterators@@)List.iter34iter f [a1; ...; an]2 applies function !f/ in turn to -[a1; ...; an]9. It is equivalent to 5f a1; f a2; ...; f an!.@@@@@@@@@@@@ @ @ @@@@ *List.iteri3(Same as 0D@ , but the function is applied to the index of the element as first argument (counting from 0), and the element itself as second argument.@@@@$4.00@@@@@@@ @ @ ~@@@@ u(List.map33map f [a1; ...; an]2 applies function !f$ to +a1, ..., an9, and builds the list 1[f a1; ...; f an] ! with the results returned by !f!.@@@@@@@@@@@@ @ @ @@@@ {)List.mapi3(Same as 6D@ , but the function is applied to the index of the element as first argument (counting from 0), and the element itself as second argument.@@@@$4.00@@@@@@@ @ @ q@@@@ g,List.rev_map3+rev_map f l= gives the same result as D@" (YD@% f l)8, but is more efficient.@@@@@@@@@@@@ z@ {@! n@@@@ d/List.filter_map3.filter_map f l) applies !f5 to every element of !l6, filters out the $None ; elements and returns the list of the arguments of the $Some* elements.@@@@$4.08@@@@@@@ @M @P q@@@@ g/List.concat_map3.concat_map f l> gives the same result as D@" (D@% f l)1. Tail-recursive.@@@@$4.10@@@@@@@ |@s }@v j@@@@ `2List.fold_left_map3-fold_left_map6 is a combination of )fold_left% and #map 2 that threads an accumulator through calls to !f!.@@@@$4.11@@@@@@@ x@ y@ z@ _@@@@ O.List.fold_left3>fold_left f init [b1; ...; bn]' is !f (... (f (f init b1) b2) ...) bn!.@@@@@@@@@@@@ Y@ Z@ [@ L@@@@ H/List.fold_right3?fold_right f [a1; ...; an] init' is !f a1 (f a2 (... (f an init) ...))5. Not tail-recursive.@@@@@@@@@@@@ R@ S@ D@ O@@@@ AA@6Iterators on two lists@@*List.iter23 #iter2 f [a1; ...; an] [b1; ...; bn]2 calls in turn 5f a1 b1; ...; f an bn!.@@@@@@@@0Invalid_argument =if the two lists are determined to have different lengths.@@@@@ X@ Y@ E@  @@@@@ 7)List.map23 "map2 f [a1; ...; an] [b1; ...; bn]' is 7[f a1 b1; ...; f an bn]!.@@@@@@@@0Invalid_argument =if the two lists are determined to have different lengths.@@@@@ G@' H@* 3@- .@@@@ $-List.rev_map230rev_map2 f l1 l2= gives the same result as D@" (6D@) f l1 l2)8, but is more efficient.@@@@@@@@@@@@ 7@N 8@Q #@T @@@@ /List.fold_left23 -fold_left2 f init [a1; ...; an] [b1; ...; bn]' is *f (... (f (f init a1 b1) a2 b2) ...) an bn!.@@@@@@@@0Invalid_argument =if the two lists are determined to have different lengths.@@@@@ $@r %@u &@x @{ @@@@ 0List.fold_right23 .fold_right2 f [a1; ...; an] [b1; ...; bn] init' is *f a1 b1 (f a2 b2 (... (f an bn init) ...))!.@@@@@@@@0Invalid_argument Qif the two lists are determined to have different lengths. Not tail-recursive.@@@@@ @ @ @ @ @@@@ A@-List scanning@@,List.for_all37for_all f [a1; ...; an] = checks if all elements of the list satisfy the predicate !f9. That is, it returns !(f a1) && (f a2) && ... && (f an)= for a non-empty list and $true6 if the list is empty.@@@@@@@@@@@@ @ @ @@@@ +List.exists36exists f [a1; ...; an] G checks if at least one element of the list satisfies the predicate !f9. That is, it returns !(f a1) || (f a2) || ... || (f an)= for a non-empty list and %false6 if the list is empty.@@@@@@@@@@@@ @ @ @@@@ -List.for_all23(Same as WD@ #, but for a two-argument predicate.@@@@@@@@0Invalid_argument =if the two lists are determined to have different lengths.@@@@@ @ @ @ @@@@ ,List.exists23(Same as QD@ #, but for a two-argument predicate.@@@@@@@@0Invalid_argument =if the two lists are determined to have different lengths.@@@@@ @3 @6 @9 @@@@ ۠(List.mem3)mem a set8 is true if and only if !a> is equal to an element of #set!.@@@@@@@@@@@@ @W @Z @@@@ ޠ)List.memq3(Same as *D@ X, but uses physical equality instead of structural equality to compare list elements.@@@@@@@@@@@@ @o @r @@@@ ؠA@.List searching@@)List.find3(find f l ' returns the first element of the list !l ! that satisfies the predicate !f!.@@@@@@@@)Not_found $if there is no value that satisfies !f0 in the list !l!.@@@@@ @ @ @@@@ -List.find_opt3(find f l ' returns the first element of the list !l ! that satisfies the predicate !f-. Returns $None % if there is no value that satisfies !f0 in the list !l!.@@@@$4.05@@@@@@@ @ @ @@@@ /List.find_index3/find_index f xs) returns &Some i(, where !i 2 is the index of the first element of the list "xs0 that satisfies #f x>, if there is such an element.@/ It returns $None= if there is no such element.@@@@#5.1@@@@@@@ *@ +@ @@@@ -List.find_map3,find_map f l) applies !f4 to the elements of !l 8 in order, and returns the first result of the form &Some v%, or $None3 if none exist.@@@@$4.10@@@@@@@ /@F 0@I @@@@ .List.find_mapi3(Same as (find_map , but the predicate is applied to the index of the element as first argument (counting from 0), and the element itself as second argument.@@@@#5.1@@@@@@@ @` @c @@@@ +List.filter3*filter f l & returns all the elements of the list !l? that satisfy the predicate !f >. The order of the elements in the input list is preserved.@@@@@@@@@@@@ @ @ @@@@ -List.find_all3(find_all5 is another name for -D@!.@@@@@@@@@@@@ @ @ @@@@ ,List.filteri3(Same as ED@ , but the predicate is applied to the index of the element as first argument (counting from 0), and the element itself as second argument.@@@@$4.11@@@@@@@ @ @ @@@@ ڠA@1List manipulation@@)List.take3(take n l7 returns the prefix of !l+ of length !n3, or a copy of !l$ if ,n > length l!.@% !n5 must be nonnegative.@@@@#5.3@@@0Invalid_argument#if !n- is negative.@@@@@ @ @ @@@@ )List.drop3(drop n l7 returns the suffix of !l' after !n2 elements, or "[]$ if ,n > length l!.@% !n5 must be nonnegative.@@@@#5.3@@@0Invalid_argument#if !n- is negative.@@@@@ 6@G 7@J 3@@@@ #/List.take_while3.take_while p l + is the longest (possibly empty) prefix of !l + containing only elements that satisfy !p!.@@@@#5.3@@@@@@@ 5@j 6@m *@@@@ /List.drop_while3.drop_while p l + is the longest (possibly empty) suffix of !l 9 starting at the first element that does not satisfy !p!.@@@@#5.3@@@@@@@ 2@ 3@ '@@@@ .List.partition3-partition f l9 returns a pair of lists ((l1, l2)+, where "l1 $ is the list of all the elements of !l? that satisfy the predicate !f&, and "l2 ' is the list of all the elements of !l5 that do not satisfy !f >. The order of the elements in the input list is preserved.@@@@@@@@@@@@ K@ L@ @@@@@ *2List.partition_map31partition_map f l9 returns a pair of lists ((l1, l2) ! such that, for each element !x3 of the input list !l!:#if #f x$ is 'Left y1', then "y1' is in "l1%, and@#if #f x$ is (Right y2', then "y2' is in "l2!.@@ ) The output elements are included in "l1% and "l2 G in the same relative order as the corresponding input elements in !l!.@4 In particular, :partition_map (fun x -> if f x then Left x else Right x) l6 is equivalent to -partition f l!.@@@@$4.12@@@@@@@ @T @W @@@@ mA@1Association lists@@*List.assoc3)assoc a l ' returns the value associated with key !a9 in the list of pairs !l.. That is, >assoc a [ ...; (a,b); ...] = b' if %(a,b)< is the leftmost binding of !a) in list !l!.@@@@@@@@)Not_found %if there is no value associated with !a0 in the list !l!.@@@@@ @ @ @@@@ .List.assoc_opt3-assoc_opt a l ' returns the value associated with key !a: in the list of pairs !l/. That is, 'assoc_opt a [ ...; (a,b); ...] = Some b( if %(a,b)< is the leftmost binding of !a) in list !l.. Returns $None & if there is no value associated with !a1 in the list !l!.@@@@$4.05@@@@@@@ @ @ @@@@ )List.assq3(Same as D@ O, but uses physical equality instead of structural equality to compare keys.@@@@@@@@@@@@ @  @  @@@@ -List.assq_opt3(Same as nD@ O, but uses physical equality instead of structural equality to compare keys.@@@@$4.05@@@@@@@ @ % @ ( @@@@ .List.mem_assoc3(Same as ӐD@4, but simply return $true= if a binding exists, and %false ( if no bindings exist for the given key.@@@@@@@@@@@@ @ I @ L @@@@ -List.mem_assq3(Same as -D@ O, but uses physical equality instead of structural equality to compare keys.@@@@@@@@@@@@ @ a @ d @@@@ 1List.remove_assoc30remove_assoc a l> returns the list of pairs !l ! without the first pair with key !a , if any. Not tail-recursive.@@@@@@@@@@@@ @  @  @@@@ x0List.remove_assq3(Same as *D@ c, but uses physical equality instead of structural equality to compare keys. Not tail-recursive.@@@@@@@@@@@@ @  @  {@@@@ _A@.Lists of pairs@@*List.split3 3Transform a list of pairs into a pair of lists: =split [(a1,b1); ...; (an,bn)]$ is >([a1; ...; an], [b1; ...; bn])8. Not tail-recursive.@@@@@@@@@@@@ s@  t@@@@ L,List.combine3 3Transform a pair of lists into a list of pairs: #combine [a1; ...; an] [b1; ...; bn]' is 7[(a1,b1); ...; (an,bn)]!.@@@@@@@@0Invalid_argument ?if the two lists have different lengths. Not tail-recursive.@@@@@ _@  `@  U@@@@ ?A@'Sorting@@)List.sort3 3Sort a list in increasing order according to a comparison function. The comparison function must return 0 if its arguments compare as equal, a positive integer if the first is greater, and a negative integer if the first is smaller (see Array.sort for a complete specification). For example, .Stdlib.compare@@ \ is a suitable comparison function. The resulting list is sorted in increasing order. D@ | is guaranteed to run in constant heap space (in addition to the size of the result list) and logarithmic stack space.@ n The current implementation uses Merge Sort. It runs in constant heap space and logarithmic stack space.@@@@@@@@@@@@ W@  X@  J@@@@ @0List.stable_sort3(Same as +D@ , but the sorting algorithm is guaranteed to be stable (i.e. elements that compare equal are kept in their original order).@ n The current implementation uses Merge Sort. It runs in constant heap space and logarithmic stack space.@@@@@@@@@@@@ K@ % L@ ( >@@@@ 4.List.fast_sort3(Same as GD@$ or +D@ +, whichever is faster on typical input.@@@@@@@@@@@@ A@ C B@ F 4@@@@ *.List.sort_uniq3(Same as eD@ Z, but also remove duplicates: if multiple elements compare equal, keep only the first.@@@@94.02 (4.03 in ListLabels)#5.4 3the element kept was not necessarily the first one.@@@@@@@@ 9@ c :@ f ,@@@@ "*List.merge3 #Merge two lists: Assuming that "l1% and "l2 5 are sorted according to the comparison function #cmp", /merge cmp l1 l2 > will return a sorted list containing all the elements of "l1% and "l2 9. If several elements compare equal, the elements of "l1 $ will be before the elements of "l2 ?. Not tail-recursive (sum of the lengths of the arguments).@@@@@@@@@@@@ S@  T@  F@  A@@@@ 7A@3Lists and Sequences@@+List.to_seq34Iterate on the list.@@@@$4.07@@@@@@@ A@  B@@@@ -+List.of_seq3>Create a list from a sequence.@@@@$4.07@@@@@@@ 0@  1@@@@ @@ @@A#Seq&Either@@@@@