Welcome the channel on the development of Cro, a set of libraries for building reactive distributed systems, lovingly crafted to take advantage of all the Raku Programming Language has to offer (cro.services). This channel is being logged for historical purposes.
Set by lizmat on 24 May 2021.
m_zero I'm wondering what is the plan for prefix // and prefix ||? Prefix // seems useful: It tests for "definedness". It isn't implemented in the current release... but src/Raku/ast implements it and can parse it. On the other hand, prefix || seems not useful: it always just returns its argument unchanged (as far as I can tell or infer). It is implemented in the current release... but src/Raku/ast doesn't support it at all. 07:38
07:50 lizmat left
SmokeMachine Isn’t it for being able to align the || on every line, as it can be done on regex? 08:11
11:06 patrickb left
jubilatious1_98524 @m_zero On another note, I'm not sure I understand the need for prefix // when we can metaop just about anything: 11:14
m: my @a = 1..3; my @b = (); say [&&] @a,@b; 11:15
Raku eval []
jubilatious1_98524 m: my @a = 1..3; my @b = (); say [&&] @b,@a;
Raku eval []
jubilatious1_98524 m: my @a = 1..3; my @b = (); say [||] @a,@b;
Raku eval [1 2 3]
jubilatious1_98524 m: my @a = 1..3; my @b = (); say [||] @b,@a; 11:16
Raku eval [1 2 3]
jubilatious1_98524 m: my @a = 1..3; my @b = (); say [//] @a,@b;
Raku eval [1 2 3]
jubilatious1_98524 m: my @a = 1..3; my @b = (); say [//] @b,@a; 11:17
Raku eval []
11:37 librasteve_ left
m_zero @jubilatious1_98524 I think the use case is in checking if a scanner has been defined. 11:48
11:48 lizmat joined
m: use v6.*; my $a; say //$a; 11:49
Raku eval False
11:56 lizmat left 12:19 patrickb joined 12:27 lizmat joined 12:28 lizmat left 12:45 rba left 13:00 rba joined 13:14 lizmat joined 13:16 lizmat left, lizmat_ joined 13:19 lizmat_ left 13:32 librasteve_ joined
.landyacht. Does it have the same precedence as defined? If it were a bit tighter that would be nice, specifically tighter than ?? so ternaries based on definedness are easier 14:14
librasteve it has symbolic unary precedence 14:19
! + - ~ ? | || +^ ~^ ?^ ^ // <== same as these guys - which I think is what you want 14:20
m: my $x = 1; say //$x ?? 'yo' !! 'no'; 14:22
Raku eval Exit code: 1 ===SORRY!=== Error while compiling /home/glot/main.raku Null regex not allowed. Please use .comb if you wanted to produce a sequence of characters from a string. at /home/glot/main.raku:1 ------> my $x = 1; say //⏏$x ?? 'yo' !! 'no';
librasteve hmm sadly not
oh its 6.e
m: use 6.e.*; my $x = 1; say //$x ?? 'yo' !! 'no'; 14:23
Raku eval Exit code: 1 ===SORRY!=== Error while compiling /home/glot/main.raku Malformed postfix call at /home/glot/main.raku:1 ------> use 6.e.*⏏; my $x = 1; say //$x ?? 'yo' !! 'no';
librasteve m: m: use v6.*; my $x = 1; say //$x ?? 'yo' !! 'no'; 14:24
Raku eval Exit code: 1 ===SORRY!=== Error while compiling /home/glot/main.raku Too late to switch language version. Must be used as the very first statement. at /home/glot/main.raku:1 ------> m: use v6.*⏏; my $x = 1; say //$x ?? 'yo' !! 'no';
librasteve huh
anyway when I use v6 on my local box still get the same Null regex error 14:25
.landyacht. She’s putting up a fight 😆
I wonder if something about the surrounding context confuses the parser 14:26
librasteve yeah - maybe
guess I would defer to one of the grown ups on this...
jubilatious1_98524 m: use v6.*; my $x = 1; say //$x ?? 'yo' !! 'no'; 16:08
Raku eval yo
jubilatious1_98524 m: use v6.*; my $x = 1; say $x ?? 'yo' !! 'no'; 16:09
Raku eval yo
jubilatious1_98524 m: use v6.*; my $x = Nil; say //$x ?? 'yo' !! 'no'; 16:17
Raku eval no
jubilatious1_98524 m: use v6.*; my $x = Nil; say $x ?? 'yo' !! 'no'; 16:18
Raku eval no
[Coke] v6.* is only needed for experimental preview. 16:21
(per the docs)
m: my $x = Nil; say //$x ?? 'yo' !! 'no'; # try without... 16:22
ah. ok, tried that locally and in #raku, without the v6.c it dies.
er, v6.* 16:23
... what are you trying to do with //$x ? 16:25
I've only see // as an infix.
like 'my $x; say $x // "default value"'
ah. docs.raku.org/language/operators#prefix_// 16:26
... available only in 6.e, so that tracks.
ok, I was only paying attention from the code samples, what's the actual issue, sorry? 16:28
jubilatious1_98524 m: my $a = Nil; say !!$a; 18:59
Raku eval False
jubilatious1_98524 m: use v6.e; my $a = Nil; say //$a; 19:00
Raku eval Exit code: 1 ===SORRY!=== Error while compiling /home/glot/main.raku Raku v6.e requires PREVIEW modifier at /home/glot/main.raku:1 ------> use v6.e⏏; my $a = Nil; say //$a;
jubilatious1_98524 m: use v6.e.* my $a = Nil; say //$a; 19:02
Raku eval False
jubilatious1_98524 m: use v6.e.* my $a = Nil; say !!$a; 19:03
Raku eval False
jubilatious1_98524 I'm not seeing a difference between the new //boolean coercer, and the classic !! "bang-bang" (or not-not) double boolean method. 19:06
m: use v6.e.* my $a = 1; say !!$a; 19:09
Raku eval True
jubilatious1_98524 m: use v6.e.* my $a = 0; say !!$a;
Raku eval False
librasteve_ [Coke] earlier today we had these three examples of prefix `//` 19:19
m: use v6.*; dd //Nil 19:20
#True
m: use v6.*; dd //1
#True
m: use v6.*; dd //0
#True
arggh - the first one is False of course 19:21
then the idea arose to use `//` as a modifier on the test in a ternary like
m: my $x = Nil; say //$x ?? 'yo' !! 'no'; 19:22
as you saw above this errors, shame
the question is, is the compiler too eager to pick `//` up and error as an empty regex in this case 19:23
[btw Camelia is dead for me]
[Coke] You need to have v6.e.PREVIEW enabled, I think 19:29
which v6.* does
camelia doesn't work in here, but does in #raku 19:30
yah, just tested that line with v6.* in #raku, it works. 19:31
so if you want the experimental stuff, you'll need to scope it for the entire file (script or module) 19:32
librasteve tx! 19:37
m_zero @librasteve - surely there is a difference between Nil and the state of being undefined. Hence, it makes sense to me that //Nil should indeed return True 21:56
@jubilatious1_98524 - // is a test for definedness, not "truthiness" 21:58
m: use v6.*; my $n = Nil; dd //$n; dd !!$n; 21:59
Raku eval Bool::False Bool::False
m_zero Gah! does Nil mean the same as undefined? Surely that isn't so....
Nevermind - it indeed does let you undefine a variable. Okay then.... 22:01
librasteve m: use v6.*; my $n; dd //$n; 22:25
Raku eval Bool::False
librasteve yeah assign Nil just resets a var to its default, in this case (Any)
[Coke] you can see the difference with a typed var declaration. 22:44
cokebot9000 m: my Int $a = 3; $a=Nil; dd $a 22:47
Raku eval Int $a = Int
SmokeMachine Boolean coerced? Shouldn’t it be ? Or so?
m: say ?42 22:48
[Coke] ? is boolean, // is "defined", I think
cokebot9000 m: use v6.*; dd ?False; dd //False; 22:49
Raku eval Bool::False Bool::True
cokebot9000 ^^
23:41 lizmat joined 23:44 lizmat left