This channel is intended for people just starting with the Raku Programming Language ( Logs are available at
Set by lizmat on 8 June 2022.
stevied ok, had to do IO::Spec::Unix.splitpath for some reason 00:15
SmokeMachine %h{ ||@k } wasn’t implemented yet, right? 00:18
guifa SmokeMachine oh right! I forgot all about that! 00:21
SmokeMachine m: my %h; %h{“a”; “b”; “c”} = 1; dd %h; my @k = <x y z>; %h{ ||@k } = 2; dd %h
camelia Hash %h = {:a(${:b(${:c(1)})})}
Hash %h = {:a(${:b(${:c(1)})}), :x(2), :y(Any), :z(Any)}
guifa will go to the corner and put on his dounce cap
SmokeMachine Yes, not implemented yet… :(
It seems I was wrong! 00:45
m: use v6.e.PREVIEW; my %h; %h{“a”; “b”; “c”} = 1; dd %h; my @k = <x y z>; %h{ ||@k } = 2; dd %h
camelia Hash %h = {:a(${:b(${:c(1)})})}
Hash %h = {:a(${:b(${:c(1)})}), :x(${:y(${:z(2)})})}
SmokeMachine \o/
guifa: 👆 00:46
01:50 frost joined 02:27 frost left 02:30 frost joined 08:14 dakkar joined 13:23 Kaiepi joined 13:24 jgaz joined
stevied why does 0 ... Inf create an infinite loop while 0 ... * does not? 13:41
lizmat there shouldn't be any difference? please make an issue if you can provide code showing the difference :-) 13:42
stevied ah, ok. this was only happening in code that was getting .EVAL'd 13:45
ah, ok. this was only happening in code that was getting .EVAL'd
not sure why my code didn't throw an error. said "stub code" executed. anyway, ok. 13:47
Anton Antonov @guifa I think what you suggested should be put in a package named, say. `Hash::DeepLookup`. 13:55
@guifa I think what you suggested should be put in a package named, say, `Hash::DeepLookup`.
13:58 jgaz left 14:24 frost left 15:20 jgaz joined 15:51 johnjaye left 16:10 jgaz left 16:32 dakkar left
stevied this code stops after the first for iterations: `(loop (my $i = 0; $i < 10; $i++) { say $i; })[3]` 16:36
but this code does not: `(for 1,2,3,4,5 { .say })[2];` 16:37
anyone know why?
this code stops after the first few iterations: `(loop (my $i = 0; $i < 10; $i++) { say $i; })[3]` 16:38
Nemokosch do you mean that the first one is lazy? 16:43
stevied that's what I'm actually trying to learn about. laziness. So i'm fiddling with code examples to try to get a good handle on it
guifa huh, that's strange that it's lazy there 16:44
stevied so a `loop` is lazy 16:45
Nemokosch I'm not sure if this is a bug or a feature
even $i stopped at 3 so the loop definitely didn't terminate on the condition
guifa per docs
"Unlike a for loop, one should not rely on whether returned values are produced lazily. It would probably be best to use eager to guarantee that a loop whose return value may be used actually runs:"
m: (eager loop (my $i = 0; $i < 10; $i++) { say $i; })[3] 16:46
camelia 0
stevied yeah, so here's where I'm confused: 16:47
Nemokosch so this is "undefined behavior" lol
and indeed, lazy for also works, vice versa
stevied says "As it so happens, loops return Seqs."
so `for` is a loop, right?
Nemokosch `for` is a loop but `for` is not a `loop` 16:49
question is, which one they meant xD
first I read it as `loop`s but idk if it was meant that way
stevied it just says "loops". Does it mean `loops`s
it just says "loops". Does it mean `loops`s?
let me see if I can throw an is lazy on the for loop 16:51
Nemokosch you can say `lazy for` I tried that
stevied ok, yeah. huh.
guifa There something that could be cleaned up there for sure.
A lazy for returns Seq, an eager returns List
stevied so I guess for loops are "eager" by default and a loop is "lazy" be default 16:52
Nemokosch the return types differ for sure
guifa a while loop also produces a Seq 16:53
Nemokosch a simple `for` returns a List
while a simple `loop` returns a Seq
Nahita > Unlike a for loop, one should not rely on whether returned values are produced lazily
Can someone translate this again in English? Does this mean, I can rely on returned values being produced lazily in case of "for" loops?
stevied ok, I see. and a List is not lazy
Nahita but it's not the case, is it
Nemokosch apparently it is the opposite but I think it can be read as the opposite as well
stevied yeah, I read that a few times and could not tell what it was saying
Nemokosch it says "whether", not "that"
guifa so basically, the only time you'll get a List is on an eager for
Nemokosch you should not rely on the outcome - which is apparently false?
Nahita :p
16:55 Kaiepi left
Nemokosch anyway, there are multiple sources of confusion here 16:55
even if this is the intended behavior, it could be described more clearly
or even stated at all
Nahita oh, as in "whether returned values are produced lazily *or not*"
Nemokosch "I can really on _whether_ a for loop is eager or not"
Nahita but then it's not saying anything in effect, i suppose...
Nemokosch like this only states consistency for me
not an actual behavior xD
guifa "you should not rely on" means different compilers and different versions may result in a different behavior (with respect to laziness). This will only affect you if you have a loop with side effects 16:56
Nemokosch and indeed
(for 1..* { .say }) is a reactor melting 16:57
it does try to generate it all
is this surely not some syntax trickery?
stevied ok, so basically, the for loop is an exception and will do eager
other loops will be lazy, but it can be compiler dependent. does that sound right? 16:58
guifa But basically, all loops return Seq *except* an eager for (and eager is the default for for)
Nemokosch pfff 16:59
does Roast have something about this?
I guess it should
17:05 jgaz joined 17:24 Kaiepi joined
stevied ``` 17:34
my $incremented = 0;
my $var = do for <1 2 3 4> -> $d { };
say $var.^name;
my $incremented = 0;
my $var = lazy for <1 2 3 4> -> $d { };
say $var.^name;
that spell it out nicely. first return List and second returns Seq
19:20 MasterDuke left 19:34 MasterDuke joined
I'm unable to retrieve a file in my module that is in the resource directory: 20:45
my $blah = %?RESOURCES<examples/Lists/somefile>;
say $blah;
this just returns (Any)
the file exists and it's in my meta file
sienet_ja_LSD[m] what if you add use lib $?FILE.IO.dirname; in the beginning? 20:48
umm, with the appropriate dir of course
stevied like this? `use lib $?FILE.IO.examples/Lists;` 20:51
SmokeMachine m: (do for 1,2,3,4,5 { .say })[2]
camelia 1
sienet_ja_LSD[m] FILE.IO.dirname gives you the current working directory, but you may add to it with .add, so: use lib $?FILe.IO.dirname.add("examples/Lists"); 20:54
might need .resolve.relative 20:55
like there 20:56
stevied doesn't work. just get "coud not evaluate arguments" 20:57
20:58 jgaz left
sienet_ja_LSD[m] use lib $?FILE.IO.dirname.add("examples/Lists").resolve.relative; 20:58
stevied same error 21:00
sienet_ja_LSD[m] hmm I'm getting that error too 21:23
Morfent `$?FILE.IO.sibling(...)`? 21:54
sienet_ja_LSD[m] %?RESOURCES should produce a Distribution::Resources object based on META6.json, but it's not doing it 22:00
stevied does the module have to be run through make first? 22:05
sienet_ja_LSD[m] not sure, but at least here it says that you should be able to run it with -Ilib directly from the source dir 22:08
stevied This variable will work with the current repository chain structure, and will give you the right way to get to the resource independently of it being installed or not; 22:10
this has got to be a bug 22:18
sienet_ja_LSD[m] aye something's up 22:19
stevied ok, got it working from a module 22:22
but it does not work from t/sometest.t
sienet_ja_LSD[m] well nice if it works at least half 22:24
lizmat sienet_ja_LSD[m]: you must use -I. and have the META6.json correctly set up 22:45
sienet_ja_LSD[m] I used, but I didn't do it like they told in that github discussion (write it in a sub) 22:46