<div dir="auto">Here is the infinite/fixed code working in rust for conciseness : <a href="https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=90bc78702650e8bd12af9efdd71d969a">https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=90bc78702650e8bd12af9efdd71d969a</a></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Sep 27, 2023, 17:54 Clément BOUDEREAU <<a href="mailto:cboudereau@gmail.com">cboudereau@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi Remi,<div><br></div><div>Thank you for your feedback, this is exactly what I wanted to do.</div><div><br></div><div>Here is a tennis kata I made using pattern matching only:<br><a href="https://gist.github.com/cboudereau/1f3ea7acd6d6712746c6d9f0e258deff#file-tennis-rs-L50" target="_blank" rel="noreferrer">https://gist.github.com/cboudereau/1f3ea7acd6d6712746c6d9f0e258deff#file-tennis-rs-L50</a><br><a href="https://gist.github.com/cboudereau/ff891382a345ca81e8f4c6c836d9837b" target="_blank" rel="noreferrer">https://gist.github.com/cboudereau/ff891382a345ca81e8f4c6c836d9837b</a><br><br>You can also match higher tuple cardinality.<br><br>regards</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Sep 27, 2023 at 4:04 PM Remi Forax <<a href="mailto:forax@univ-mlv.fr" target="_blank" rel="noreferrer">forax@univ-mlv.fr</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi recently Clément BOUDEREAU has reported a bug on amber-dev and unrelated to that bug,<br>
taking a look to the code I've noticed this<br>
<br>
<br>
int compareTo(final Value<T> o) {<br>
return switch (new Tuple<>(this, o)) {<br>
case Tuple<Value<T>, Value<T>>(Value.Infinite<T> _, Value.Infinite<T> _) -> 0;<br>
case Tuple<Value<T>, Value<T>>(Value.Infinite<T> _, Value.Fixed<T> _) -> 1;<br>
case Tuple<Value<T>, Value<T>>(Value.Fixed<T> _, Value.Infinite<T> _) -> -1;<br>
case Tuple<Value<T>, Value<T>>(Value.Fixed<T> fst, Value.Fixed<T> snd) -><br>
fst.value.compareTo(snd.value);<br>
};<br>
}<br>
<br>
Here what Clément want is to match two values (here, "this" and "o") but the only way to do that is to wrap them into a pair (here named Tuple),<br>
Should we not provide a way to match several values natively ?<br>
<br>
Something like<br>
<br>
int compareTo(final Value<T> o) {<br>
return switch (this, o) {<br>
case (Value.Infinite<T> _, Value.Infinite<T> _) -> 0;<br>
case (Value.Infinite<T> _, Value.Fixed<T> _) -> 1;<br>
case (Value.Fixed<T> _, Value.Infinite<T> _) -> -1;<br>
case (Value.Fixed<T> fst, Value.Fixed<T> snd) -><br>
fst.value.compareTo(snd.value);<br>
};<br>
}<br>
<br>
regards,<br>
Rémi<br>
</blockquote></div><br clear="all"><div><br></div><span class="gmail_signature_prefix">-- </span><br><div dir="ltr" class="gmail_signature">C.BOUDEREAU</div>
</blockquote></div>