This channel is intended for people just starting with the Raku Programming Language ( Logs are available at
Set by lizmat on 8 June 2022.
:(**@rest, *%rest) and i got the answer right in the docs lol 00:26
Nemokosch how did you get this idea, though? because you must know something that I don't 00:28
:(**@rest, *%rest) idk i just searched for Signature to see anything i missed 00:35
Nemokosch what I mean is that you somehow got the right idea
that seemed kind of absurd to me
so there must be something that clicked for you that I'm missing 00:36
:(**@rest, *%rest) right idea of what?
Nemokosch annotating signatures on a callback 🥺 00:37
:(**@rest, *%rest) i just know typescript
Nemokosch apparently :() can be used for Signatures in general 00:38
:(**@rest, *%rest) yeah 00:39
Nemokosch | for captures, : for signatures
:(**@rest, *%rest) \
Nemokosch depends
a capture inside a signature is a |var 😄 00:40
I happen to know a relevant issue that may be solveable with the right understanding 00:42
say, your data type is a two-element List with two pairs as the two elements
how do you write a signature for that, and how can you invoke it? 00:43
:(**@rest, *%rest) like so ((a => 1), (b => 2)) and you want to find a way to destructure it? 00:44
m: my (**(:@key, :@value)) = a => 1, b=> 2; say @key; say @value; 00:46
Nemokosch in particular, it would be good to be able to pass these pair duplets to a function with a proper signature 00:48
:(**@rest, *%rest) m: my @(:@key, :@value) = a => 1, b=> 2; say @key; say @value; 00:52
Nemokosch hm, that's not what I meant 00:58
for that, something like
m: my ($pair1, $pair2) = a => 1, b => 2; dd $pair1, $pair2;
should work?
seems like that 00:59
if one wants key-key, value-value, idk if there is a straightforward way
however, I want something like 01:08
m: sub test((Pair $p1, Pair $p2)) { dd $p1, $p2; } test (a => 1, b => 2); #damn this is gonna work 01:09
no, it actually didn't work
I could show what I wanted
:(**@rest, *%rest) how do i match an unbound repetition in regex 01:11
smth like {2,} in perl regex
**2..* amirite 01:14
Nemokosch yep
so yeah this would be good to test out, not even sure the problem is with the capture or the signature 01:15
:(**@rest, *%rest) m: sub test((Pair $p1, Pair $p2)) { dd $p1, $p2; } test((a => 1, b => 2)); #damn this is gonna work
hmm 01:16
Nemokosch the symptom is understandable: it took the pairs as named args
:(**@rest, *%rest) m: sub test((Pair $p1, Pair $p2)) { dd $p1, $p2; } test([a => 1, b => 2]); #damn this is gonna work
it is already parenthesized how can it possibly confuse 01:17
Nemokosch because of the subsignature I think
I imagine that it somehow takes the List(/Array) and slips it, then compares it to the (sub)signature 01:18
so it ends up with \(a => 1, b => 2) being checked against :(Pair $p1, Pair $p2) 01:19
I edited the capture because here I think the representation (at least in the output direction) also hints whether it's taken as named or positional 01:20
although it could be that I edited the wrong direction 😆 but here I think there is a difference between the two presentations 01:21
01:42 raschip joined 02:51 raschip left 03:52 MasterDuke joined
stevied anyway to do a synonym for an attribute? 04:36
:(**@rest, *%rest) synonym? 05:24
stevied alias 05:29
doesn't look like there's a way. I just used the constructor signature to do it
06:13 deadmarshal_ left
:(**@rest, *%rest) alias for an attribute? has $!attr; method !alias { $!attr } i don't know why you want an alias for an attribute 06:13
stevied Just curious to see if it could be done. Looks like that might work. 06:16
Will have to look at in the morning. I was thinking how you might handle the case that would allow an attribute be called either “color” or “colour” 06:18
06:27 deadmarshal_ joined
:(**@rest, *%rest) pick one of them and use it for the entire codebase for consistency i would choose color to bow down to murica 07:16
stevied This isn’t real code. I’m just doing experiments to explore options. 07:45
:(**@rest, *%rest) i think attributes can be aliased if they are rw because then the variable will be a reference 08:14
m: class A { has $.x is rw; has $.y is rw = $!x; } my $a = => 2); $a.y = 3; say $a.x; 08:17
oh that doesn't work smh
m: class A { has $.x is rw; has $.y is rw = $!x; } my $a = => 2); $a.x = 3; say $a.y;
08:23 snonux joined 08:24 snonux_ joined
Nemokosch Can it be bound maybe? 08:34
08:55 p6steve left
hm, not sure, or at least not the usual way perhaps. Anyway, worth checking: 09:00
m: class A { has $.x is rw; has $.y is rw := $!x; } my $a = => 2); $a.x = 3; say $a.y; 09:01
AttrX::Mooish can get you aliases for sure: 09:03
09:06 snonux left 09:07 snonux_ left
but yes from what I see at the time of TWEAK you could bind them together 09:12
so it is possible natively but I'd definitely rather trust Vadim that he actually got it right
09:12 dakkar joined 09:40 NemokoschKiwi joined 09:46 NemokoschKiwi left 11:06 raschip joined
Nahita m: sub f(Int() $a) { "ok" } say f 3; say f "no"; 11:36
so it fails but since i didn't use it, all fine? 11:37
m: sub f(Int $a) { "ok" } say f 3; say f "no"; 11:38
Nemokosch hmmm 11:48
I wonder if this is a spesh thing or something 11:49
could be that $a was dropped altogether?
welp, no matter what spesh flags I tried to set, the behavior is the same... 11:51
hm, so it seems that $a itself is a Failure in this case 11:58
Zephyr ?ping 12:11
Dyno Pong!
:(**@rest, *%rest) what does ! mean multi sub trait_mod:<is>(Routine:D $r, :$default!)
Nahita you must supply this! 12:13
get it?
lizmat it adds an "is default" trait to routines
Nahita i think they asked about exclamation mark there 12:14
and i made a terrible joke
not even a joke
lizmat ah, it makes the named argument mandatory
Nahita BTW is that cat yours? it's super super cute
:(**@rest, *%rest) ah means its required
no its from the internet 12:15
lizmat yeah, otherwise the dispatch to it would be ambiguous
as named args are by default optional
:(**@rest, *%rest) they are optional by default unlike pos args hmm
Nahita yeah, you make positionals optional with "?" 12:16
Nemokosch yes.. remember? they can go straight into *%_
lizmat or you can add a value to be used in absence of specification 12:17
Nemokosch hm, I mean... perhaps one doesn't follow the other
from the other. but the principle is similar
lizmat m: sub foo($a = 42) { say $a }; foo(666); foo
camelia 666
:(**@rest, *%rest) m: sub opt-named(:$x) { say $x } opt-named; 12:18
is that a good idea is it to save you from specifying the default value or using ? 12:20
Zephyr m: say 'test'; 14:53
Raku eval ansi test
Zephyr welp, the ansi
lemme fix
m: say 'test'; 14:54
Raku eval test
14:59 ab5tract joined
lizmat and yet another Rakudo Weekly News hits the Net: 15:12
Nahita m: multi f(str $s) { "ok" } say f "yes" 15:59
Raku eval ok
Nahita m: multi f(str $s, str $t) { "ok" } say f "yes", "no" 16:00
Raku eval Exit code: 1 ===SORRY!=== Error while compiling main.raku Calling f(Str, Str) will never work with any of these multi signatures: (str $s, str $t) at main.raku:2 ------> say ⏏f "yes", "no"
Nahita uh, is this expected?
[first call says "ok", second one is signature mismatch compile time error]
16:16 dakkar left 16:18 dakkar joined 16:25 snonux joined 16:26 snonux_ joined 16:52 snonux left, snonux_ left 18:04 tg57 joined 18:30 raschip left 18:33 dakkar left
nHail How do I make packages work? I found this:, ran zef install NCurses, but when trying to use it in my project it errors out with Undeclared routine: initscr used on line 8 18:36
I think it's a bit suspicious that the install process didn't create any files in my working directory
Nemokosch you would do use NCurses; in your code 18:38
that will pull all things marked for exporting straight into your local(? iirc) scope 18:39
including initscr
nHail Well, now I'm even more confused. I copied a different example script from the same repo and that one doesn't error.
Nemokosch as much as I can see, this is a NativeCall module so fingers crossed for you 18:40
can you tell which one didn't work?
nHail Alright, that's interesting. Most of my past work is in JS, you're saying I don't need to handle a node-modules directory now?
Nemokosch the modules are installed "globally", by default at least 18:41
nHail PEBKAC. I forgot a ; on the use 18:42
Nemokosch 18:43
from the readme of the zef repo
nHail Interesting
For reference I'm porting an old nodeJS project into raku for practice, I guess if I publish this I'll just mention the dependencies in the install instructions 18:44
Nemokosch but then the module itself works, right? 18:46
always a bit shivery with native dependencies
nHail It seems to.
For now :)
Nemokosch you know, like Node and gyp
those modules love to break...
or well, just not build in the first place 😄 18:47
if it does work, however, it could actually prove useful for me as well, termios is troublesome on Windows 18:48
18:49 snonux joined, snonux_ joined
nHail It works on my computer, I'm gonna hold off on messing with it until I ever decide to publish 18:50
19:09 NemokoschKiwi joined
gfldex @Nahita I'm investigating your str vs. Str conundrum. 19:17
Nahita thanks 21:03
Nemokosch so far it seems like 21:04
1. multis distinguish str and Str
2. only subs allow Strs as str
3. and this is beyond comprehension, really, and sometimes it even fails! 21:05
seems like that should fail but for certain function bodies, it succeeds
say $s would make the dispatch itself fail 21:06
on the other hand, $s.say would run just fine
21:28 NemokoschKiwi left 21:40 snonux_ left, snonux left 21:41 snonux joined 21:42 snonux_ joined
nHail Hi, I'm trying to understand raku's concurrency, I was wondering if anyone could give an example of a program that just prints <key> was pressed whenever you press a key? 21:47
And, one that does this without freezing the main thread to wait for a keypress (ie. not a while loop)? 21:55
Nemokosch supply-react-tap kind of stuff 21:56
nHail Yeah
Nemokosch only used it like, once in a year and a half 😅
nHail > Using getc to get a single keypress from a terminal will only work properly if you've set the terminal to "unbuffered". Otherwise the terminal will wait for the return key to be struck or the buffer to be filled up before perl6 gets even a single byte of data. 22:10
How does one un-buffer a terminal?
22:12 NemokoschKiwi joined
stevied I often hear people say "suck and such" programming language is "fun." What do they mean by that that? That they can do cool stuff in a short period of time and feel like wizards? 22:13
That it doesn't make the feel painfully dumb?
Or that the language is not tedious to write? All of the above? 22:14
22:15 tg57 left
Nemokosch there are only a handful of people I can think of who dealt with terminal in a low-level way 22:15
ab5tract nHail: a super simple example:
22:16 NemokoschKiwi left
lakmatiol I just used ncurses to do it, but you can also do it with certain shell commands, stty on linux IIRC. 22:19
ab5tract nHail: You might want to look into Terminal::Print. We have a way of reading raw input. (Not 100% sure what your use case is). 22:20 22:21
22:27 ab5tract left
nHail I am using ncurses for visuals 22:29
It looks like the way in there is to use getch, but it seems as though you have to wait for it to return
Use case: writing a TUI mp3 player. 22:30
I want keyboard commands ofc
But also a progress bar for the currently playing song, which means no freezing the program to wait for input 22:31
Nemokosch dream on 22:33
nHail It looks like terminal::print will do it though
thanks ab5tract
22:36 NemokoschKiwi joined, NemokoschKiwi left 23:46 tg57 joined 23:49 tg57 left