Raku Conference Day 2 on Youtube: www.youtube.com/watch?v=BL9-XdC9WYI 🦋 Welcome to the MAIN() IRC channel of the Raku Programming Language (raku.org). Log available at irclogs.raku.org/raku/live.html . If you're a beginner, you can also check out the #raku-beginner channel!
Set by lizmat on 14 August 2022.
00:01 morte_ left 00:06 reportable6 left 00:09 reportable6 joined 01:07 irc_user left 01:19 squashable6 left 01:21 squashable6 joined 01:28 Guest10 joined 01:29 Guest10 left 02:05 Guest10 joined 02:07 Guest10 left 03:07 evalable6 left, shareable6 left, linkable6 left, bloatable6 left, notable6 left, unicodable6 left, sourceable6 left, bisectable6 left, releasable6 left, greppable6 left, coverable6 left, committable6 left, benchable6 left, reportable6 left, squashable6 left, nativecallable6 left, quotable6 left, tellable6 left, statisfiable6 left, reportable6 joined, tellable6 joined, linkable6 joined, sourceable6 joined, coverable6 joined, notable6 joined, evalable6 joined 03:08 releasable6 joined, bloatable6 joined, quotable6 joined 03:09 statisfiable6 joined, greppable6 joined, squashable6 joined, committable6 joined, bisectable6 joined, shareable6 joined, benchable6 joined 03:10 nativecallable6 joined, unicodable6 joined 03:50 vrurg_ joined, vrurg left 04:50 nativecallable6 left, benchable6 left, coverable6 left, linkable6 left, unicodable6 left, committable6 left, quotable6 left, sourceable6 left, bloatable6 left, bisectable6 left, squashable6 left, reportable6 left, evalable6 left, releasable6 left, greppable6 left, shareable6 left, notable6 left, statisfiable6 left, tellable6 left, releasable6 joined, notable6 joined, unicodable6 joined 04:51 benchable6 joined, jmcgnh left, reportable6 joined, statisfiable6 joined, nativecallable6 joined 04:52 quotable6 joined, evalable6 joined, coverable6 joined, squashable6 joined, bisectable6 joined, tellable6 joined, sourceable6 joined, shareable6 joined 04:53 linkable6 joined, greppable6 joined, bloatable6 joined, committable6 joined 05:05 jmcgnh joined 06:05 linkable6 left, evalable6 left 06:06 reportable6 left, evalable6 joined 06:08 linkable6 joined 06:09 reportable6 joined 06:47 eseyman left 07:37 Sgeo left 08:37 statisfiable6 left, coverable6 left, benchable6 left, reportable6 left, shareable6 left, squashable6 left, sourceable6 left, nativecallable6 left, linkable6 left, committable6 left, releasable6 left 08:38 statisfiable6 left, sourceable6 joined, squashable6 joined 08:39 linkable6 joined, shareable6 joined, benchable6 joined, nativecallable6 joined, coverable6 joined 08:40 statisfiable6 joined, reportable6 joined, committable6 joined, releasable6 joined 09:40 vrurg joined, vrurg_ left 10:14 sena_kun joined 11:14 coverable6 left, sourceable6 left, committable6 left, nativecallable6 left, quotable6 left, unicodable6 left, bloatable6 left, shareable6 left, notable6 left, benchable6 left, greppable6 left, reportable6 left, squashable6 left, tellable6 left, releasable6 left, statisfiable6 left, evalable6 left, linkable6 left, bisectable6 left 11:15 statisfiable6 joined, bisectable6 joined, nativecallable6 joined, reportable6 joined, unicodable6 joined 11:16 shareable6 joined, releasable6 joined, linkable6 joined, coverable6 joined, notable6 joined, evalable6 joined, tellable6 joined, squashable6 joined 11:17 bloatable6 joined, quotable6 joined, sourceable6 joined, greppable6 joined, committable6 joined 11:18 benchable6 joined 11:19 grondilu joined
grondilu wasn't there a shorthand for &infix:<op>? 11:20
m: dd &[+] 11:21
camelia Sub+{is-pure}+{Precedence infix:<+> = proto sub infix:<+> ($?, $?, *%) {*}
grondilu found it
11:35 grondilu left 12:07 reportable6 left 12:09 reportable6 joined
Geth docker: 652cf35f9d | (Daniel Mita)++ (committed using GitHub Web editor) | README.md
Fix travis-ci badge
12:20
12:22 MitarashiDango[m joined 12:51 wingfold joined 13:06 wingfold_ joined, wingfold left 13:17 wingfold_ left 13:30 jgaz joined 13:36 wingfold joined 13:41 morte_ joined 13:49 Kaiepi left
leont Apparently, junctions will turn ranges into lists when they're the only argument 14:06
m: dd any(1..4) 14:07
camelia any(1, 2, 3, 4)
leont Is that a bug or is that intended? (it is annoying me because it doesn't allow me to do none(1..4) to negate the junction)
m: dd any(1..4, 42) 14:08
camelia any(1..4, 42)
leont It's especially annoying because I haven't found any way to turn it off without passing more arguments 14:09
14:11 jmcgnh left
lizmat I think that's intentional, to prevent a lot of code having to be more or less duplicated 14:14
wrt to collapsing the Junction
14:16 jmcgnh joined
leont There should be some way to override that, though. 14:19
14:24 wingfold left 14:28 thundergnat joined
thundergnat m: say any(1..4,Empty) # Kinda bogus but... 14:29
camelia any(1..4)
leont thundergnat: unexpected, but for now I can work with it
14:30 Sgeo joined
thundergnat Yeah, not ideal but sometimes you gotta go with what works. 14:30
leont I think that fundementally we're missing a negated() builtin. Which is a bit like none but only takes one value.
Smartmatching against none($whatever) feels a bit confusing, even if it's terribly useful 14:31
14:31 thundergnat left
Nemokosch Junctions have underdeveloped semantics 14:55
I say this every now and then but yeah, junctions have a very anglocentric interface, even at the expense of usefulness 14:58
tonyo what could anglocentric interface possibly mean 15:12
15:14 wingfold joined 15:18 wingfold left
Nemokosch Embracing logically vague or convoluted concepts like "any" and "none" 15:49
Altreus This perspective interests me because I am an anglo, and therefore I have never seen it before 15:56
Are these concepts not formalised? Could they not be replaced with some set logic symbols and become purely mathematical?
tonyo not sure i'd consider those vague, any means at least one of a set and none seems clear to me. why do you consider those vague or convoluted? 16:04
Nemokosch "For none, P holds" is logically equivalent to "For all, P doesn't hold". This is no big deal, except Raku _forces_ you to write the former, because of "negation lifting" which is, well, a questionable principle 16:06
So you are left with a less clear and less mentally flexible phrasing
"Any" is unsavable on the other hand
tonyo a∈B == any && x∉A == none
Nemokosch Since "I can do anything" and "Can I do anything" have different "any"s in them, it's a mess, without inventing some higher order logic 16:08
tonyo can you write that equivalence in raku?
i think by asking the latter you've already answered it
Nemokosch I think I have pinpointed a legitimate design mistake 16:10
tonyo i don't disagree, i'd like to see what you're saying the equivalent "For none, P holds" and "For all, P doesn't hold" translate to 16:12
without the translation to actual code it's just vague and convoluted
16:18 evalable6 left, linkable6 left 16:19 linkable6 joined 16:20 evalable6 joined
tonyo thinking about that a bit more, i don't think those two statements are equivalent "For none, P holds", "For all, P doesn't hold" 16:20
m: say 1 ~~ all(1,2,3); say 1 ~~ none(1,2,3); 16:21
camelia False
False
tonyo m: say 1 ~~ all(1,1,1); say 1 ~~ none(1,1,1);
camelia True
False
tonyo sure enough, en.wikipedia.org/wiki/Denying_the_antecedent 16:22
nemokosch ^ 16:23
16:27 sena_kun left
Nemokosch I think you are getting this wrong 16:41
There is no inversion here 16:42
This is really just "no prime numbers are even" versus "all prime numbers are not-even aka odd" 16:43
(1, 2, 3).none == 2 # False 16:45
Versus
(1, 2, 3).all != 2 # True, transformed into !((1, 2, 3) == 2) for the wrong reasons
So yeah, if you want to say "all of these are different from X", you are forced to say "none of these are equal to X" 16:46
tonyo (1,1,1).none == 1 # False 17:02
(1,1,1).all != 1 # False
you can pick examples where the inversion is true but there are at least as many cases as there are real numbers where it's untrue 17:03
i mean, the logical fallacy i posted is using exactly the language you are using, i'm not sure how you can defend it 17:06
"If all, then P" "If none, then !P" 17:07
().none == 2 #False 17:13
().all == 2 #False
17:17 jgaz left
tonyo ().all != 2 # still False 17:20
Nemokosch If you can point out where the fallacy is in "all primes are odd" <=> "no primes are even", I pay you a trip to Dubai 17:23
tonyo i said already, your hand picked single example works fine. asserting something based on one example is wrong and so is your thought process. i've already shown you counter examples using your same logic 17:24
Nemokosch You literally didn't
tonyo haha, ok. 17:25
Nemokosch You just showed that you failed to understand the very example and went for some strawman
tonyo no strawman here, just an example of you misunderstanding set theory and showing your logic applied to an example where it doesn't work out for you 17:26
Nemokosch The fact that you linked something about implications when I'm talking about quantors on sole predicates
No "if"s to begin with 17:27
tonyo set.none == 2 == false, set.all != 2 == true where set = (1,2,3) => (true), set = () => (false)
set = (2,2,2) => (false) 17:28
Nemokosch Yes, and this is wrong behavior
set.all != X is NOT the same as !(set.all == X) in logic, only in Raku 17:29
It is the same as set.none == X
tonyo it isn't.
(set.all != X) != (set.none == X) in logic or in theory 17:30
Nemokosch Not in Raku, yes in logic 17:31
If and only if all values are different from X, are none of the values equal to it
Yes, it is, lol
tonyo no, it isn't. what is the result of set.none == 2 when set is empty?
Voldenet True, obviously 17:35
Nemokosch See, that's what the problem is by using anglo-centric quantors in the first place...
tonyo and then what is the result of set.all != 2 when, again, the set is empty?
oops, nemokosch there is not problem with anglo-centric quantors 17:36
ugexe the result should obviously be True, nil or False, nil
Voldenet none -> no element matches the predicate 17:37
all -> all elements match the predicate
Nemokosch True, that one is for sure
tonyo going back to work instead of arguing with someone who just says `no` and then refuses to use examples outside of cherry picked examples
Voldenet so `set.all != 2` and `set.all == 2` can be used to test whether the set is empty
tonyo or set.elems : ) 17:38
Voldenet with empty set and a single predicate, all elements match the predicate and no elements match the predicate
that makes perfect sense
Nemokosch For "all", it's a well-established practice that the value on an empty set is true, that's the algebraically sane "default" for logical "and" 17:39
No gotcha with this
Voldenet so `().all == 2`, `().all != 2`, `().none != 2` and `().none == 2` should be all true
Nemokosch ^this 17:40
Seems like we can agree with Voldenet on some things, after all :D 17:41
Voldenet ;)
Nemokosch Although I would stay away from .none in borderline cases like this, which is part of my whole point
Because it's not really a common quantifier in math 17:42
Who would dare to contradict a cornerstone of basically all formalisms used for e.g relational databases 17:45
Voldenet …in relational databases predicate can be both true and false at the same time and I think it's beautiful ;) 17:46
Anton Antonov For what is worth, here is how Mathematica does the tests listed by Voldenet : 17:52
Here is the image link: i.imgur.com/uGy6WVu.jpg 17:54
Meaning Mathematica agrees with Voldenet's statement : 17:55
"` ().all == 2, ().all != 2, ().none != 2 and ().none == 2` should be all true."
Voldenet raku/mathematica definitions are slightly different though 17:57
Nemokosch It's rather the issue itself in this case 17:58
Voldenet Sure, I'd expect the mathematica ones
Anton Antonov Sure, I am just mentioned the handling/implementation in Mathematica of similar functionalities.
Nemokosch We do know that blah.all != X implicitly transforms into !(blah.all == X)
Voldenet which is unfortunate in this case 17:59
Nemokosch This is a deliberate design... mistake, and I really feel I can't just drop the judgemental part 18:00
Anton Antonov @Voldenet Sorry for this ignorant question -- did you see the image I posted in Discord, or saw the image I posted at Imgur?
tonyo @anton antonov: yes
it came through
Voldenet The imgur one, discord one was just devoured by bot
Anton Antonov Ok, good to know!
@tonyo Which one came through? 18:02
tonyo also, nemokosch isn't 2 a prime number? nevermind about dubai though.
anton - the imgur link (at least in irc) 18:03
ugexe 12:54:30 <discord-raku-bot>
<Anton Antonov> Here is the image link: i.imgur.com/uGy6WVu.jpg
Nemokosch It is but what does this have to do with logical equivalence? :D 18:04
Anton Antonov @tonyo and @ugexe -- Thanks! I will use Imgur in the future.
tonyo <Nemokosch> If you can point out where the fallacy is in "all primes are odd" <=> "no primes are even", I pay you a trip to Dubai
Voldenet hehehe :D 18:05
tonyo aside from that, your original assertion was about any and none, which is still untrue, no matter how many times you say otherwise 18:06
not sure how we got off on the all <> none strawman you brought forth, possibly a backtrack 18:07
18:08 reportable6 left, irc_user joined, reportable6 joined 18:11 kolofon joined
Voldenet fortunately this is easy fo tix 18:15
to fix*
m: sub infix:<!=>($a, $b) { !($a == $b) }; 18:16
camelia ( no output )
tonyo only two prime numbers are even <=> all but two prime numbers are odd (sometimes)
Voldenet m: sub infix:<!=>($a, $b) { !($a == $b) }; say so ().none != 2;
camelia True
tonyo m: say 2 !~~ none(); say 2 ~~ none(); 18:17
camelia False
True
tonyo m: say 2 !~~ any(); say 2 ~~ any();
camelia True
False
18:48 kolofon left
leont Apparently, coercing to a role isn't well supported. It puns, and therefor only works on concrete types. I'd argue this a bug, because it's really not helpful for anything. 18:52
18:55 melezhik joined
Nemokosch Good sir, I made points that you had no intentions to engage in, instead you started pointing fingers at random unrelated things, like whether equivalent statements used as an example for equivalence are true or not, and some random fallacy that I also don't like but doesn't fit here whatsoever. 18:55
18:56 [Coke]_ is now known as [Coke]
melezhik . 18:56
Nemokosch What should I prove further? You yourself proved pretty well that none is a mess to start defining 18:57
18:59 melezhik left
[Coke] iwbni raku.land deps were links 19:06
19:17 morte_ left
tbrowder anyone tired of debating is welcome to voice an opinion of rakudo PR #5031 which is concerned with adding a method for breaking down an IO::Path basename onto parts.. 19:33
already existing is .extension, but no equivalent method exists for the part of the basename with the extension removed. 19:35
19:41 morte_ joined, morte_ left
Nemokosch I'm not at home but if you need an advocate for "torturing implementors on the user's behalf", I'm ready to help :) 20:17
20:37 irc_user left 21:21 sena_kun joined 21:22 irc_user joined
p6steve tbrowder: phew 21:26
tbrowder: you have this ```<_file.tar.gz.1_> ``` what are the underscores? 21:31
21:40 mexen left
tbrowder Those were the examples given by … I’ll have to check. If you look at the PR you should be able to see the author. I’ll check and return… 21:46
Ah, I saw those _ while editing my reply to @vrurg. I see now they don’t show in the browser view, so I need to clean up my response—thanks for that catch! 21:54
leont Did we ever end up documenting the details of the coercion protocol? I have questions and I can't find the answers anywhere 21:55
tbrowder <p6steve>: it looks correct now, thnx 22:00
22:01 sena_kun left
leont m: sub f(\rows) { dd rows }; f([ [ 1, 2 ] ]) 22:17
camelia [1, 2]
22:17 sena_kun joined
leont I don't get why Raku eats the outer brackets 22:18
Is there any way to make it not do that?
22:18 sena_kun left 22:26 thundergnat joined
thundergnat m: sub f(\rows) { dd rows }; f([ [ 1, 2 ], ]) # single argument woes once again 22:26
camelia [[1, 2],]
leont I was expecting \ not to have those woes 22:28
Wasn't the whole point of that "pass me this verbatim"? 22:30
thundergnat m: sub f(**@rows) { dd @rows }; f([ [ 1, 2 ] ]) # maybe this will help?
camelia [[1, 2],]
thundergnat single argument ends up biting in unexpected places. I still prefer to have it but it can lead to some convolutions. 22:32
leont thundergnat: that breaks when actually having more than one inner list 22:33
thundergnat hmm. It does. ok, I've got nothing. 22:35
ugexe i really dislike having these generic method names like 'suffix' and 'stem' being added for very specific, not often used features
when those terms, to me at least, are very much not tied to a path 22:36
this can introduce future inconsistencies where you have a 'suffix' for IO::Path that acts on the basename only, and a suffix for strings in general that would have no concept of basename 22:38
like whats wrong with basename-suffix or basename-stem? 22:39
leont I can't imagine ever wanting stem in particular 22:43
What is want is the basename as implemented in Unix and in Perl: one that can remove a given suffix. Bonus points if it can take a junction of them.
The basename method not doing what any other basename does is rather frustrating 22:44
Possibly basename should just take an optional argument to do just that 22:45
22:50 thundergnat left 23:04 swaggboi left 23:07 Kaiepi joined 23:17 swaggboi joined 23:21 vrurg_ joined, vrurg left 23:34 guifa left 23:54 vrurg_ is now known as vrurg