<html><head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
  </head>
  <body>
    <p>Hi Juan, I'm attaching 2 squeak source files, one with 2 methods
      in compatibility and the other the source.st out of my latest
      PromisesLocal-rabbt.66,mcz. <br/>
    </p>
    <p>I got the Vat's eventual process working (issues with terminate),
      <br/>
    </p>
    <p>but I'm blowing up on a call to #becomeForward:, from
      ENearPromise>>#becomeContext:, when resolving a promise.
      Here is an image of the resulting debugger. Is there more
      information I could provide or is someone willing to attempt to
      reproduce? Many thanks! ❤️‍🔥🐰</p>
    <p><img src="cid:part1.z4bBE9q0.CONMYlxu@callistohouse.org" alt=""/></p>
    <div class="moz-cite-prefix">On 6/23/23 20:50, rabbit via Cuis-dev
      wrote:<br/>
    </div>
    <blockquote type="cite" cite="mid:KA4Bp9wVUoV3KqzkgmedY8AfqiuVWyAsqtFjqA3p3nFPV03u_gU9F9w0Tu8jU8YYkqulDT6brELYF8oc7RqrIt6dIvMcYNOaSgJ-U28utUo=@callistohouse.org">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
      <div dir="auto">Ahh! Thanks for the reminder. That’s how I started
        loading code a month ago or whenever I was loading mczs. I’ll
        look into it tomorrow.</div>
      <div dir="auto"><br/>
      </div>
      <div dir="auto">Is it possible to get Monticello pkg loading
        working again? That’d be very good.<caret></caret></div>
      <div dir="auto"><br/>
      </div>
      <div dir="auto">What’s my go to solution for code packaging in
        Cuis? I’d like to establish Crypto in Cuis.</div>
      <div><br/>
      </div>
      <div class="protonmail_signature_block" id="protonmail_signature_block">
        <div>❤️‍🔥🐰</div>
      </div>
      <div class="signature_br" contenteditable="false"><br/>
      </div>
      <div class="signature_br" contenteditable="false"><br/>
      </div>
      <div><br/>
      </div>
      <div><br/>
      </div>
      On Fri, Jun 23, 2023 at 19:21, Juan Vuletich via Cuis-dev <<a class="" href="mailto:On Fri, Jun 23, 2023 at 19:21, Juan
        Vuletich via Cuis-dev <<a href=" moz-do-not-send="true">cuis-dev@lists.cuis.st</a>>
      wrote:
      <blockquote type="cite" class="protonmail_quote"> Hi rabbit,<br/>
        <br/>
        I suggest unzipping the Monticello files to extract the code in
        plain text (yes, Monticello files are just zip files). When you
        are there, you can also fix the line ending convention of the
        files. And of course, you'd neet to check the code, because Cuis
        is not 100% compatible with Squeak.<br/>
        <br/>
        We don't use Monticello in Cuis. At some point in the past it
        was possible to open MC files in Cuis, but nobody used that
        feature in ages and it got bitrotten.<br/>
        <br/>
        Thanks,<br/>
        <br/>
        On 6/23/2023 4:00 PM, rabbit via Cuis-dev wrote:
        <blockquote type="cite">
          <p>I just realized I have been working in squeak. I updated
            PromisesLocal-rabbt.66.mcz and am attaching it. I am getting
            the error below when I 'browse code' or 'install Mionticello
            package'. I do not know. How can I load Monticello packages?
            Any way to get the Installer available in cuis? Install
            Monticello config maps?<br/>
          </p>
          <p>I appreciate you,<br/>
            rabbit</p>
          <p><img alt="" src="imap://rabbit%40callistohouse%2Eorg@127.0.0.1:1143/fetch%3EUID%3E/INBOX%3E2607?header=quotebody&part=1.1.2&filename=part1.06000006.00060206@cuis.st" class="loading-internal" width="862" height="398"/></p>
          <p><br/>
          </p>
          <div class="moz-cite-prefix">On 6/22/23 16:21, rabbit via
            Cuis-dev wrote:<br/>
          </div>
          <blockquote type="cite">
            <p>Hey! I got inspired by your proposal, Luciano, and here's
              my solution in eventual promises. Code can be loaded as:</p>
            <blockquote>
              <p>Installer ss project: 'Cryptography'; install:
                'ProCrypto.release.3'.<br/>
              </p>
            </blockquote>
            <p>I added a test method <br/>
            </p>
            <blockquote>
              <p>RefsTest>>#testMultiReturns<br/>
                <br/>
                | selectCount unionFlag pair |<br/>
                unionFlag := false.<br/>
                selectCount := 0.<br/>
                ((pair := self promiseResolverPair) key xgcd: 9) <br/>
                <<* [:each | selectCount := selectCount + 1.
                Transcript cr; show: 'each = ', each];<br/>
                <<* [:g :s :t | unionFlag := true. Transcript cr;
                show: 'g = ', g, '; s = ', s, '; t = ', t. g + s + t].<br/>
                pair value resolve: 21.<br/>
                (Delay forMilliseconds: 333) wait.<br/>
                self assert: (selectCount == 3).<br/>
                self assert: (unionFlag).</p>
            </blockquote>
            <p>This calls new multireturn #xgcd: method</p>
            <blockquote>
              <p>xgcd: anInteger<br/>
                " 21 xgcd: 9"<br/>
                | g s t |<br/>
                g := self gcd: anInteger.<br/>
                s := self / g.<br/>
                t := anInteger / g.<br/>
                ^ { g. s. t}<br/>
              </p>
            </blockquote>
            <p>And in the test method there are eventual sends
              (#<<*) to the promise of the #xgcd: send once the
              reciever promise is resolved to 21. This implementation
              detects cardinality of the continuation block and sends
              #whenResolved: appropriately, for future evaluation.</p>
            <blockquote>
              <p>Object>>#<<* continuation<br/>
                <br/>
                (continuation numArgs == 1)<br/>
                ifTrue: [^ self whenResolved: [:result | result do:
                [:each | continuation value: each]]].<br/>
                ^ self whenResolved: [:result | continuation
                valueWithArguments: result].</p>
            </blockquote>
            <p>One can see a 1 cardinality schedules the continuation to
              evaluate with each result, while a continuation with
              cardinality 2 or more will be scheduled to receive all
              results. #valueWithArguments:</p>
            <p>Here are 2 return handlers, <br/>
            </p>
            <blockquote>
              <p>promise := ((pair := self promiseResolverPair) key
                xgcd: 9).</p>
            </blockquote>
            <p>the first for each argument <br/>
            </p>
            <blockquote>
              <p>promise <<* [:each | selectCount := selectCount +
                1. Transcript cr; show: 'each = ', each];</p>
            </blockquote>
            <p>and the second for all three arguments.</p>
            <blockquote>
              <p>promise <<* [:g :s :t | unionFlag := true.
                Transcript cr; show: 'g = ', g, '; s = ', s, '; t = ',
                t. g + s + t].</p>
            </blockquote>
            <pre cols="72" class="moz-signature">--
❤️‍🔥🐰



</pre>
            <div class="moz-cite-prefix">On 6/21/23 09:44, Luciano
              Notarfrancesco via Cuis-dev wrote:<br/>
            </div>
            <blockquote type="cite">
              <div dir="auto">Interesting, thanks for sharing!</div>
              <div dir="auto">Actually I think it’s the same thing I
                did, my implementation calls
                BlockClosure>>#valueWithPossibleArgs: and takes
                only as many arguments as needed by the block but the
                array can be bigger than that (it should be named
                #valueWithPossibleArguments: tho, abbreviations are
                ugly).</div>
              <div dir="auto"><br/>
              </div>
              <div><br/>
                <div class="gmail_quote">
                  <div class="gmail_attr" dir="ltr">On Wed, 21 Jun 2023
                    at 15:37 Christian Haider via Cuis-dev <<a class="moz-txt-link-freetext" href="mailto:cuis-dev@lists.cuis.st" moz-do-not-send="true">cuis-dev@lists.cuis.st</a>>
                    wrote:<br/>
                  </div>
                  <blockquote style="margin: 0px 0px 0px 0.8ex;
                    border-left: 1px solid rgb(204, 204, 204);
                    padding-left: 1ex;" class="gmail_quote">
                    <div style="" lang="DE">
                      <div class="m_-976565113171439616WordSection1">
                        <p class="MsoNormal"><span lang="EN-CA">I added
                            something similar to my Values package (VW
                            and ports).</span></p>
                        <p class="MsoNormal"><span lang="EN-CA">The
                            source is</span></p>
                        <p style="margin-left: 35.4pt;" class="MsoNormal"><span style="font-family:
                            "Courier New";" lang="EN-CA">SequenceableCollection>>asArgumentsIn:
                            aBlock</span></p>
                        <p style="margin-left: 35.4pt;" class="MsoNormal"><span style="font-family:
                            "Courier New";" lang="EN-CA">
                            "Evaluate aBlock with the receiver's
                            elements as parameters.</span></p>
                        <p style="margin-left: 35.4pt;" class="MsoNormal"><span style="font-family:
                            "Courier New";" lang="EN-CA">
                            aBlock takes its arguments from the
                            receiver.</span></p>
                        <p style="margin-left: 35.4pt;" class="MsoNormal"><span style="font-family:
                            "Courier New";" lang="EN-CA"> 'ok'</span></p>
                        <p style="margin-left: 35.4pt;" class="MsoNormal"><span style="font-family:
                            "Courier New";" lang="EN-CA"> #(1
                            2 3) asArgumentsIn: [:a :b :c | a + b + c]</span></p>
                        <p style="margin-left: 35.4pt;" class="MsoNormal"><span style="font-family:
                            "Courier New";" lang="EN-CA"> #(1
                            2 3) asArgumentsIn: [:a :b | a + b]</span></p>
                        <p style="margin-left: 35.4pt;" class="MsoNormal"><span style="font-family:
                            "Courier New";" lang="EN-CA"> #(1
                            2 3) asArgumentsIn: [:a | a]</span></p>
                        <p style="margin-left: 35.4pt;" class="MsoNormal"><span style="font-family:
                            "Courier New";" lang="EN-CA"> #(1
                            2 3) asArgumentsIn: [42]</span></p>
                        <p style="margin-left: 35.4pt;" class="MsoNormal"><span style="font-family:
                            "Courier New";" lang="EN-CA"> 'not
                            ok'</span></p>
                        <p style="margin-left: 35.4pt;" class="MsoNormal"><span style="font-family:
                            "Courier New";" lang="EN-CA"> #(1
                            2 3) asArgumentsIn: [:a :b :c :d | a + b + c
                            + d]</span></p>
                        <p style="margin-left: 35.4pt;" class="MsoNormal"><span style="font-family:
                            "Courier New";" lang="EN-CA"> "</span></p>
                        <p style="margin-left: 35.4pt;" class="MsoNormal"><span style="font-family:
                            "Courier New";" lang="EN-CA"> </span></p>
                        <p style="margin-left: 35.4pt;" class="MsoNormal"><span style="font-family:
                            "Courier New";" lang="EN-CA">
                            ^aBlock cullWithArguments: self asArray</span><span lang="EN-CA"></span></p>
                        <p class="MsoNormal"><span lang="EN-CA"> </span></p>
                        <p class="MsoNormal"><span lang="EN-CA">The
                            difference is that it takes a list of any
                            size and picks out the first items and binds
                            them to the variables.</span></p>
                        <p class="MsoNormal"><span lang="EN-CA">I use it
                            often for CSV processing like</span></p>
                        <p class="MsoNormal"><span lang="EN-CA"> </span><span style="" lang="EN-CA">(line tokensBasedOn:
                            $;) asArgumentsIn: [:first :second :y | … ].</span></p>
                        <p class="MsoNormal"><span lang="EN-CA"> </span></p>
                        <p class="MsoNormal"><span lang="EN-CA">I am
                            just a bit unhappy with the name – it is too
                            long. It reads ok though.</span></p>
                        <p class="MsoNormal"><span lang="EN-CA">The pipe
                            character is an interesting idea. I have to
                            think about it.</span></p>
                        <p class="MsoNormal"><span lang="EN-CA"> </span></p>
                        <p class="MsoNormal"><span lang="EN-CA">I am use
                            it for a while now and I am very happy with
                            it.</span></p>
                        <p class="MsoNormal"><span lang="EN-CA"> </span></p>
                        <p class="MsoNormal"><span lang="EN-CA">Happy
                            hacking,</span></p>
                        <p class="MsoNormal"><span>Christian</span></p>
                      </div>
                    </div>
                    <div style="" lang="DE">
                      <div class="m_-976565113171439616WordSection1">
                        <p class="MsoNormal"><span> </span></p>
                        <p class="MsoNormal"><span> </span></p>
                        <div style="border-width: 1pt medium medium;
                          border-style: solid none none; padding: 3pt
                          0cm 0cm; border-color: rgb(225, 225, 225)
                          currentcolor currentcolor;">
                          <p class="MsoNormal"><b>Von:</b> Cuis-dev <<a class="moz-txt-link-freetext" target="_blank" href="mailto:cuis-dev-bounces@lists.cuis.st" moz-do-not-send="true">cuis-dev-bounces@lists.cuis.st</a>>
                            <b>Im Auftrag von </b>Luciano
                            Notarfrancesco via Cuis-dev<br/>
                            <b>Gesendet:</b> Mittwoch, 21. Juni 2023
                            15:13<br/>
                            <b>An:</b> Discussion of Cuis Smalltalk <<a class="moz-txt-link-freetext" target="_blank" href="mailto:cuis-dev@lists.cuis.st" moz-do-not-send="true">cuis-dev@lists.cuis.st</a>><br/>
                            <b>Cc:</b> Luciano Notarfrancesco <<a class="moz-txt-link-freetext" target="_blank" href="mailto:luchiano@gmail.com" moz-do-not-send="true">luchiano@gmail.com</a>><br/>
                            <b>Betreff:</b> [Cuis-dev] Methods that
                            return multiple values</p>
                        </div>
                        <p class="MsoNormal"> </p>
                        <p class="MsoNormal">Smalltalk doesn’t have a
                          convention for methods returning multiple
                          values, and I’m not aware of any
                          implementation.</p>
                        <div>
                          <p class="MsoNormal">An example of such thing
                            is the extended gcd: ‘a xgcd: b’ returns g,
                            s, t where g is the gcd, and as + bt = g.
                            Writing methods that return multiple values
                            is easy with the curly brackets syntax,
                            Integer>>#xgcd: ends with something
                            like</p>
                        </div>
                        <div>
                          <p class="MsoNormal"> ^ {g. s. t}</p>
                        </div>
                        <div>
                          <p class="MsoNormal">But using sending
                            messages that return multiple values is kind
                            of annoying, I end up doing something like:</p>
                        </div>
                        <div>
                          <p class="MsoNormal"> xgcd := a xgcd: b.</p>
                        </div>
                        <div>
                          <p class="MsoNormal"> g := xgcd at: 1.</p>
                        </div>
                        <div>
                          <p class="MsoNormal"> s := xgcd at: 2.</p>
                        </div>
                        <div>
                          <p class="MsoNormal"> t := xgcd at: 3</p>
                        </div>
                        <div>
                          <p class="MsoNormal">Some years ago I thought
                            about using blocks for this, but I never
                            tried it. Today I just did a little
                            experiment implementing anArray | aBlock as
                            ‘^ aBlock valueWithPossibleArgs: self’ and I
                            can do:</p>
                        </div>
                        <div>
                          <p class="MsoNormal"> (a xgcd: b) | [:g :s :t|
                            … ]</p>
                        </div>
                        <div>
                          <p class="MsoNormal"> </p>
                        </div>
                        <div>
                          <p class="MsoNormal">This is seems quite nice
                            already, I guess I’ll start using it and see
                            how it feels. But the point of this mail is
                            not to show a solution, but to ask if anyone
                            have thought about this or if they know any
                            nicer solutions. Any ideas?</p>
                        </div>
                      </div>
                    </div>
                    -- <br/>
                    Cuis-dev mailing list<br/>
                    <a class="moz-txt-link-freetext" target="_blank" href="mailto:Cuis-dev@lists.cuis.st" moz-do-not-send="true">Cuis-dev@lists.cuis.st</a><br/>
                    <a class="moz-txt-link-freetext" target="_blank" rel="noreferrer" href="https://lists.cuis.st/mailman/listinfo/cuis-dev" moz-do-not-send="true">https://lists.cuis.st/mailman/listinfo/cuis-dev</a><br/>
                  </blockquote>
                </div>
              </div>
            </blockquote>
          </blockquote>
          <pre cols="72" class="moz-signature">--
❤️‍🔥🐰</pre>
        </blockquote>
        <br/>
        <br/>
        <pre cols="72" class="moz-signature">--
Juan Vuletich
cuis.st
github.com/jvuletich
researchgate.net/profile/Juan-Vuletich
independent.academia.edu/JuanVuletich
patents.justia.com/inventor/juan-manuel-vuletich
linkedin.com/in/juan-vuletich-75611b3
twitter.com/JuanVuletich</pre>
      </blockquote>
    </blockquote>
    <pre class="moz-signature" cols="72">-- 
❤️‍🔥🐰</pre>
  
</body></html>