This channel is intended for people just starting with the Raku Programming Language ( Logs are available at
Set by lizmat on 8 June 2022.
masukomi re our discussion about prefixing imported methods, and how it looked like lizmat's "from" module could prolly be hacked to do it. I looked at it but it was beyond my newb abilities, so i asked liz 00:53
> I’m thinking something like
> use from "Foo" prefix => ‘f’
> And then Foo::bar-method becomes callable as f-bar-method.
> (+ current functionality of specifying methods to import)
> Is that possible?
and she said
> A named argument in a "use" statement, is currently interpreted by the system as an indicator for EXPORT::DEFAULT namespace. So you would have to specify it as a positional Pair, so
> "prefix" => "f"
> rather than
> prefix => "f"
> But yeah, you could look at any semantics you'd want.
so ... yeah. Maybe <@724421839924756480> would be interested in tackling that. I would, but I don't understand enough ... yet. 😉
guifa_ masukomi: editing that would be pretty easy 01:12
The from module is just a about a dozen lines of code <-- for instance, this just passes through a Map. It would be fairly trivial to to modify it to prefix the keys 01:15
Basically (untested) ("use $distro; MY::<@exports[]>:p".EVAL).map({ $prefix ~ .key, .value}) 01:18
The main question is how you'd want to pass in the prefix (perhaps `use prefix-from <Module::Name prefix-value- symbolA symbolB symbolC>`) 01:20
Doing it that way just changes the EXPORT sub to `sub EXPORT($distro, $prefix, *@exports is copy) { … }` 01:44
01:56 frost joined 03:30 Kaiepi left 03:31 Kaiepi joined 05:05 Oshawott left
yabobay can hashes have Int indices? 07:02
07:54 razetime joined 08:33 m_athias left 08:35 m_athias joined 08:43 discord-raku-bot left, discord-raku-bot joined 09:00 frost left 09:03 frost joined
guifa_ yes, but you need to declare them slightly differently, otherwise upon assingmnent they'll be autocoerced into Str 09:33
m: my Str %foo{Int}; %foo{5} = 'a'; say %foo.keys.head.WHAT 09:35
camelia (Int)
guifa_ For scalared vars: 09:37
m: my Hash[Str,Int] $foo .= new; $foo{5} = 'a'; say $foo.keys.head.WHAT;
camelia (Int)
09:59 razetime left 10:00 razetime joined
yabobay i got confused before cause i was doing %foo<$_> which is completely the wrong thing 11:03
i didn't read about the angle brackets yet so that was my fault
Nemokosch `%foo<<$_>>` could work if `$_` is a string, I think 11:11
but yeah, `%foo{$_}` is better
yabobay what does %foo<<$_>> mean? 11:17
Nemokosch << is word quoting with variable interpolation 11:19
so it's kinda like %foo{"$_"} in this case 11:20
yabobay can i have ranges that are descending? 12:03
m: say $_ for 10 .. 0
Nemokosch There are multiple ways 12:04
the simplest would be to just use the sequence operator instead of the range operator 12:05
m: .say for 10 ... 0
yabobay what's the difference with that?
Nemokosch a range is a different type to begin with
yabobay a sequence is what?
Nemokosch "An iterable, potentially lazy sequence of values" according to the docs 12:07
yabobay huh
isn't that what a range is
Nemokosch absolutely not
yabobay a range is supposed to superficially look like a sequence? 12:08
Nemokosch "Interval of ordered values"
yabobay ohhh
so a sequence can be whatever
but a range has to be ordered 12:09
Nemokosch it has a step of "one"
> Iterating a range (or calling the list method) uses the same semantics as the ++ prefix and postfix operators, i.e., it calls the succ method on the start point, and then the generated elements.
yabobay i think i get it 12:11
why not just use a sequence for the same things?
why have ranges exist
Nemokosch I suppose because 1) ranges have a common and well-defined purpose 2) they can be effectively checked for with smartmatch 12:13
12:43 discord-raku-bot left, discord-raku-bot joined
Kaiepi sequences are pretty dynamic compared to a range. a range is able to smartmatch and behave as a full-blown `Positional` given its bounds alone 13:24
what you write after `...` is not the end of the sequence, but a condition to terminate the sequence on. it doesn't know the end until the entire thing is computed 13:26
say 1...(10 but role { method ACCEPTS(Mu \x) { dd x; callsame } })
yabobay so sequences cannot be lazy 13:27
Kaiepi they can be
is `&dd` stderr? 13:28
m:``` 13:29
say 1...(10 but role { method ACCEPTS(Mu \x) { say x; callsame } }) # should have correct order
`&say` wants the entire list, so it's reified eagerly here 13:30
13:31 frost left
yabobay i dont even know what any of that is 13:32
the fact there;s a but keyword is kinda funny
Kaiepi `ACCEPTS` is the method backing a smartmatch. starting a sequence with a number will try to increment until that terminating smartmatch succeeds. i'm trying to show how it goes about calculating its elements 13:36
`but` is a runtime mixin. `ACCEPTS` is being overridden on `10` 13:38
`but` makes a runtime mixin. `ACCEPTS` is being overridden on `10`
14:24 jgaz joined 15:04 razetime left 20:56 jgaz left
Nemokosch Can I do something like... a parameter that can be a Map or a List, in case of a List, it should be turned into a Map using .pairs semantics? 20:59
I mean eventually I can but with some type annotation magic 21:01
gfldex <@297037173541175296> ^^^ 22:03
multi foo(Map $wanna) {
say „got $wanna“;
multi foo(*@okish) {
foo @okish.pairs.Map;
foo 1,2,3,4;
Nemokosch the annoying thing is that it's really one argument out of 4 22:22
23:50 discord-raku-bot left, discord-raku-bot joined