<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    On 3/7/25 5:24 PM, Ezequiel Birman via Cuis-dev wrote:<br>
    <blockquote type="cite"
cite="mid:CAOo=t4c-kHGBhweiune-V1e26T86jqbOXAf=hfB+s4KM-05b5A@mail.gmail.com">
      <pre class="moz-quote-pre" wrap="">Hello

I wanted a *reject:thenDo:*. so instead of:

| taskbar userInterface |
</pre>
      <blockquote type="cite">
        <pre class="moz-quote-pre" wrap="">
"If we were to ommit this, the taskbar wouldn't exist yet, and therefore
taskbar would be initialized to nil"
*self runningWorld doOneCycleNow.*


*userInterface := UISupervisor ui.taskbar := userInterface taskbar.*

"Remove all morphs except for the taskbar. We also leave code windows
intact in case we are recovering from a crash."
*userInterface submorphs*
*    select: [ :morph | (morph isKindOf: CodeWindow) not and: [ morph ~=
taskbar ]]*
*    thenDo: #delete.*
</pre>
      </blockquote>
      <pre class="moz-quote-pre" wrap="">

I can rewrite:

</pre>
      <blockquote type="cite">
        <pre class="moz-quote-pre" wrap="">"Remove all morphs except for the taskbar. We also leave code windows
intact in case we are recovering from a crash."
*userInterface submorphs*
*    reject: [ :morph | (morph isKindOf: CodeWindow) or: [ morph = taskbar
]]*
*    thenDo: #delete.*
</pre>
      </blockquote>
      <pre class="moz-quote-pre" wrap="">

While I was at it, I refactored *select:ThenCollect:* to avoid iterating
twice, then added a *reject:thenCollect:* just for the sake of symmetry.

I attach the changeset in case you find it useful; but I wanted to know
what is your opinion on adding tests that exercise higher-level messages
like these. If they are needed or wanted, I can also add them to
BaseImageTests.

</pre>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
    </blockquote>
    Hi Ezequiel, Hello List Members,<br>
    <br>
    what do think about a package that adds some extensions methods<br>
    to the collection classes? I attached such a package and its test
    package.<br>
    <br>
    Its focus is currently on adding something similar<br>
    to Python's list comprehensions to Cuis/Haver.<br>
    <br>
    This code
    (<a class="moz-txt-link-freetext" href="https://hg.sr.ht/~cy-de-fect/GF3/browse/gf/base.py?rev=tip#L290">https://hg.sr.ht/~cy-de-fect/GF3/browse/gf/base.py?rev=tip#L290</a>):<br>
    <br>
    <pre>        <span class="k">def</span> <span class="nf">dominates</span><span class="p">(</span><span class="n">dom</span><span class="p">,</span> <span class="n">sub</span><span class="p">,</span>
                      <span class="n">orders</span><span class="o">=</span><span class="nb">tuple</span><span class="p">(</span><span class="nb">dict</span><span class="p">((</span><span class="n">t</span><span class="p">,</span> <span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">t</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">mro</span><span class="p">))</span>
                                   <span class="k">for</span> <span class="n">mro</span> <span class="ow">in</span> <span class="n">mros</span><span class="p">)):</span>
            <span class="k">if</span> <span class="n">dom</span> <span class="ow">is</span> <span class="n">sub</span><span class="p">:</span>
                <span class="k">return</span> <span class="kc">False</span>
            <span class="k">return</span> <span class="nb">all</span><span class="p">(</span><span class="n">order</span><span class="p">[</span><span class="n">d</span><span class="p">]</span> <span class="o"><=</span> <span class="n">order</span><span class="p">[</span><span class="n">s</span><span class="p">]</span>
                       <span class="k">for</span> <span class="n">d</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="n">order</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">dom</span><span class="p">,</span> <span class="n">sub</span><span class="p">,</span> <span class="n">orders</span><span class="p">))</span></pre>
    <br>
    roughly translates to this piece of Cuis code:<br>
    <br>
                orders := someHierarchies collect: [ :hierarchy | |
    order |<br>
                    order := Dictionary ofRoom: hierarchy size.<br>
                    hierarchy withIndexDo: [ :type :index | order at:
    type put: index ].<br>
                    order ].<br>
                dominates := [ :dom :sub |<br>
                    dom ~~ sub and: [<br>
                        { dom. sub. orders } zippedAllSatisfy: [ :d :s
    :order |<br>
                            (order at: d) <= (order at: s) ] ] ].<br>
    <br>
    <br>
    Have fun and Best Regards,<br>
    <br>
    Gerald<br>
  </body>
</html>