🦋 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 6 September 2022.
jaguart a question about `use v6;` vs `use v6.d+` -> I see that the second gives me access to `Supply.snip() from core.e` - is this expected? I don't have the 01:30
.PREVIEW modifier and there is no warning? v6.d doesn't show methods from core.e 01:31
tbrowder hi, can anyone explain trait handles? it looks like it can only applied to one attribute. 01:41
tbrowder m: class f{ also does Associative; has %.idx handles <AT-KEY>; has %.b handles <AT-KEY>}; use f; 01:45
camelia ===SORRY!=== Error while compiling <tmp>
Package 'f' already has a method 'AT-KEY' (did you mean to declare a multi method?)
at <tmp>:1
tbrowder docs don't mention that
jaguart handles is like delegation `has $!x handles foo,bar,baz` then when someone calls c.foo it is passed through to $!x.foo 01:50
so it doesnt make sense to have two AT-KEY methods handled by different fields
tonyo tbrowder: what is your goal with this ^ ? 01:56
jaguart m: class A { method foo { say 'foo'} }; class B { method bar { say 'bar'} }; class C { has $!a handles 'foo'; has $!b handles 'bar'; submethod TWEAK {$!a = A.new; $!b = B.new } }; C.new.foo; 01:58
camelia foo
jaguart m: class F does Associative { has %!f handles <AT-KEY EXISTS-KEY STORE>; }; my $f = F.new; $f<a> = 'ah'; say $f<a>:exists; 02:04
camelia True
tbrowder my goal is to (1) know how one should use 2 or more attributes of the same type and (2) file a doc issue 02:24
ispyhumanfly tonyo: I'm trying your instructions now. Thank you. 02:27
tellable6 2023-01-17T17:01:00Z #raku <tonyo> ispyhumanfly can you add a key value to `$HOME/.fez-config.json`: `"bundlers": ["Fez::Util::Tar"]` and give it another shot?
rf jaguart: Thanks for this, this is incredibly useful for writing simple wrapper calsses thank you.
ispyhumanfly tonyo: tonyo: so far it just hangs at "fez upload" as it has before. Will their be some debug archive as a result of my doing this? 02:31
tonyo yea, give me a second and i'll give you a one liner 02:37
if you mv .gitignore to .whatever temporarily does it work 02:38
ispyhumanfly tonyo: I'll try that. 02:45
tonyo if that works i'll prioritize getting the glob branch merged to make better dists 02:45
ispyhumanfly tonyo: yes that worked :)
tbrowder speaking of zef, another thing the docs need is a blurb on the correct way to install modules by root so all raku users see them. it'd 02:50
*it's in the voluminous zef documentation but, imho, it needs to be in the docs somewhere as a best practice. 02:52
jaguart yeah - Good Practice docs, would be very much appreciated by newbies 03:06
ugexe the default config for zef will already install modules to the global 'site' repository if it is writable (like when you are root) 03:14
github.com/ugexe/zef/blob/9779091b...1230-L1237 03:15
ispyhumanfly tonyo: Hey thank you for your help.
ugexe github.com/ugexe/zef/blob/9779091b...ig.json#L5
ispyhumanfly ugexe: good stuff.
thowe Is there, like, a recommended Mastodon server for Raku fans? fosstodon.org maybe? 03:32
Xliff \o 03:35
Is there an example written on how to reassign $*OUT to an IO::Handle::Subclass? 03:36
Um... I meant an IO::Handle subclass
Aha! I found this one... 03:38
stackoverflow.com/questions/473181...-to-stdout
Xliff m: multi sub a (1) { 1 }; multi sub a(2) { 2 }; multi sub a ("Bleah") { "Boo!" }; .signature.params.gist.say for &a.&candidates 03:57
camelia ===SORRY!=== Error while compiling <tmp>
Undeclared routine:
candidates used at line 1
Xliff m: multi sub a (1) { 1 }; multi sub a(2) { 2 }; multi sub a ("Bleah") { "Boo!" }; .signature.params.gist.say for &a.candidates 03:58
camelia (1)
(2)
("Bleah")
peter1 hi,is there anyone who knows both OCamel and Raku? 04:18
tonyo rf ^? 05:05
CIAvash tonyo: Just updated my meta info. It's `CIAvash` and changed my display name to CIAvash, changed my website to siavash.askari-nasr.com and set an email address 05:17
Nemokosch .seen jjatria 09:27
tellable6 Nemokosch, I saw jjatria 2022-09-22T14:41:01Z in #raku: <jjatria> So it _would_ have worked if I had bumped the version again?
Nemokosch :c
Homer_Simpson how can I automatically create a new list if the loop condition is true 10:30
Homer_Simpson in C you would use malloc/realloc/free 10:30
lizmat you have to be more specific 10:35
Homer_Simpson unless I just append the data to the same list 10:36
lists are mutable right
Nemokosch lists by themselves don't provide mutation, although they are not immutable in the strictest sense 10:37
an Array (which is a List) is definitely mutable
Homer_Simpson yeah but I need it to be homogenous 10:38
Nemokosch what does that mean? 10:39
Homer_Simpson where it allows mixed types
lizmat m: my @a = 1,2,3; @a.push(42); say @a 10:40
camelia [1 2 3 42]
lizmat m: my @a = 1,2,3; @a.push("foo"); say @a
camelia [1 2 3 foo]
lizmat Homer_Simpson ^^ like that ? 10:41
Homer_Simpson ill try 2 seconds
yeah like that 10:43
lizmat Note there's also .unshift if you want to add at the start 10:44
m: my @a = 1,2,3; @a.unshift("foo"); say @a
camelia [foo 1 2 3]
lizmat you might also want to check splice for more general array manipulation 10:45
Homer_Simpson I basically only use operators with arrays, idk if thats weird or not
other than get/say and maybe chomp 10:46
even chomp can be done with operators I guess
it wont resize the array but doing @a[n] = Nil or @a[n] = 0; basically removes the value from it 10:47
@a = (); or @a = Empty; or @a = |(); is to clear an array 10:48
lizmat @a.splice 10:53
but yeah... I think @a = Empty reads the best 10:54
Homer_Simpson how do I put my functions in another raku file and then include that file in my project 11:30
by functions I mean my own defined subroutines
lizmat docs.raku.org/language/modules#index-entry-use 11:31
Homer_Simpson ah I dont need the "" 11:33
tbrowder .tell tonyo ^^^ 11:35
tellable6 tbrowder, I'll pass your message to tonyo
Homer_Simpson it says it cant find Islinetype1.raku 11:36
ok its not looking my my project folder for some reason 11:38
lizmat there's two answers to your question: 11:39
the simple one, that is good for development
the more complicated one, that is good for production
which one do you want ?
Homer_Simpson pastebin.com/Rmdmq5Zb 11:41
good for development
lizmat Add -I. to your raku invocation 11:42
or do: 11:43
export RAKULIB=.
Homer_Simpson use -I Islinetype1.raku 11:44
Undeclared names I used at line 1 11:45
lizmat -I. 11:46
not:
-I
Homer_Simpson oh crud
lizmat and on the command line
Homer_Simpson ok
lizmat you could also put:use lib '.' 11:47
in your code, but that would interfere with whenever you decide to take it into production
Homer_Simpson ok so doing raku -I. do.raku still gives the same error where it cant find the file and doing raku -I. Islinetype1.raku only executed that file, where as the other file is the main file 11:56
lizmat show us the code 12:00
Homer_Simpson ok
Homer_Simpson pastebin.com/D7644832 12:07
Nemokosch you mismatch casings 12:15
lizmat also a missing "is export" 12:16
tbrowder .tell tonyo now i'm really confused 'cause i now don't need to specilfy the Associative role or the handles and all works as i originally thought it did. probably a late-night ff. back to the drawing board.... 12:18
Nemokosch also, it seems to me that importing is extension sensitive somehow
tellable6 tbrowder, I'll pass your message to tonyo
Nemokosch when I changed IsLineType1.raku to IsLineType1.rakumod, it suddenly worked... 12:20
Homer_Simpson I made a completley new project, containing lego.raku and testing.rakumod now if I do use testing.rakumod; and then do raku -I. lego.raku I get: 13:01
===SORRY!=== Error while compiling C:\Users\kris\CommaProjects\lego/lego.raku 13:02
Confused at C:\Users\kris\CommaProjects\lego/lego.raku:1 ------> use testing<HERE>.rakumod;
Nemokosch remove the extension from your "use" statement
Homer_Simpson ok now it worked 13:03
ok ill try adding the subroutine back in
Nemokosch leont: I remember multi dispatch with coercions came up as a topic 13:32
I'm mangling with the XML distribution and right now I have something like this: 13:33
gist.github.com/2colours/bd021d85d...8bea7381ff
let's put it aside whether this is a sensible api or not 13:34
but do you agree with the idea that this dispatch makes sense conceptually? haven't tried it yet but I think it might actually work now
okay check, something really weird happens - the coercion precedes the subset testing 13:41
[Coke] TIL about 'git gui blame', which is a pleasant way to go back in time to find when a line was added to a file. 14:44
melezhik tell ispyhumanfly: I see you are trying to run builds for dot-env on SparrowCI, I know error messages might be confusing , I need to improve them )), but you can take a look at any successful build from other repos as example for sparrow.yaml , for example - github.com/rawleyfowler/Net-Gemini...arrow.yaml 15:13
tell: ispyhumanfly: I see you are trying to run builds for dot-env on SparrowCI, I know error messages might be confusing , I need to improve them )), but you can take a look at any successful build from other repos as example for sparrow.yaml , for example - github.com/rawleyfowler/Net-Gemini...arrow.yaml 15:14
tellable6 melezhik, I'll pass your message to ispyhumanfly
rf I made a pull-request on his repo to fix this.
github.com/ispyhumanfly/raku-dotenv/pull/1 15:15
melezhik rf: thanks a lot !
rf No problem!
melezhik . 15:25
Geth infrastructure-doc/example-change: 006180182a | (Coleman McFarland)++ | README.pod
Trivial Change
16:22
infrastructure-doc: dontlaugh++ created pull request #7:
Trivial Change
16:23
infrastructure-doc: 006180182a | (Coleman McFarland)++ | README.pod
Trivial Change
infrastructure-doc: 8507e74e8c | (Coleman McFarland)++ (committed using GitHub Web editor) | README.pod
Merge pull request #7 from Raku/example-change

Trivial Change
Homer_Simpson ok now I am getting 'unclared routine: replace()' 16:24
it worked when it was in the same file but I moved it to a module
this is the contents of replace.rakumod: sub replace($s, $i, &y){return substr($s, 0, $i) ~ y(comb($s, $i)) ~ substr($s, $i + 1);}; 16:29
[Coke] if it's in a module, did you export it? 16:32
Homer_Simpson I dont think so
I just included it in my raku project
[Coke] you either need to refer to with the fully qualified name, Some::Module::replace ... or declare it as "is export"
Homer_Simpson how do you declare it is export
[Coke] you also need to 'use' it in the top level raku
Homer_Simpson done that 16:33
[Coke] sub foo(...) is export { ... }
Homer_Simpson thx
[Coke] github.com/coke/raku-zef-deps/blob...rakumod#L5 , e.g. 16:34
(probaby also need the "our" scope)
Homer_Simpson does the our make it accessable for the entire project rather than the entire file 16:54
in C you use static , there is also extern idk what raku's equivelents are 16:55
lizmat docs.raku.org/syntax/our 17:01
Nemokosch Raku is not really like C, I think many of these comparisons just don't make sense
Homer_Simpson can raku compile to a .exe 17:57
the exe contains the java VM bytecode 17:58
Nemokosch no (it cannot) and no (it doesn't contain the java VM bytecode) 18:00
[Coke] there is no easy way to do that, HS. 18:00
(regardless of which backend, js,moar,jvm)
rf You can probably compile to a JAR with the jvm backend 18:01
Nemokosch not really, from what I know 18:03
rf That seems odd, especially if it can target the JVM 18:27
Nemokosch I'm not sure it actually "targets the JVM" in the sense, say, Clojure targets the JVM 18:28
my vague impression of the code has been that it rather has a *JVM-based runtime* 18:29
which would mean it only "targets the JVM" by the standards it "targets the C language" (since MoarVM is written in C)
rf Ah, I see. 18:30
Nemokosch I might be wrong though. I don't know many people involved in the JVM backend, usev6 and Kaiepi basically 18:34
Homer_Simpson I wrote a load of code then reaized that I can just do print("the file: '", $fh, "' has: ", elems(lines($contents))," lines.\n"); 18:37
does raku have EOF
(end of file constant) 18:38
its actually a character but is represented by EOF, its asci ID is 0x05 18:39
ugexe you can call .eof on the handle to see if its at the eof, but i don't see why you'd need to do that 18:41
lizmat Homer_Simpson: you don't even need to get a file handle
say "$filename has $filename.IO.lines.elems() lines" 18:42
Nemokosch seems like you need to break away a bit from the C way of thinking. C is mostly concerned about bytes and memory handling. Raku is more about text processing among other things. Also, Raku is much more elastic, regarding syntax and data structures as well. 18:45
rf I am running into a weird issue where a named argument is always Nil, even if I specify it in the method call: github.com/rawleyfowler/Humming-Bi...kumod#L239 19:14
If I go `say $permanent` above everything else, even when I specify it, I get Nil. 19:15
jaguart the one I have is when you have method x ( $a, :$b ); and the call is x ( 5, :b ); where there is a space between x and ( on the calling side
it eats args because it calls x with one arg - a List, argh 19:17
s/have/hate/ 19:18
maybe do a backtrace if $permanent.^name eq 'Nil'? 19:19
rf Yeah, I'm using it like: `$response.redirect('/', :permanent);`
jaguart you also have Type on your arg so a List would barf 19:20
how about add Bool on :$permanent? 19:21
rf I'll try that 19:23
Same problem 19:24
Nahita not really reproducible but what does `say %_` gives in the method 19:27
jaguart I'd try a backtrace then to check the code-path 19:29
rf %_ is empty on every test
jaguart another introspection would be to see what (|arg) { dd arg } reports - though you might be able to see the capture walking back through your caller stack - you can in perl, not sure about Raku 19:32
tonyo .tell ispyhumanfly no problem. i have a fix for that bug in progress 19:33
tellable6 tonyo, I'll pass your message to ispyhumanfly
jaguart not tried: `dd $_ for Backtrace.new.nice;` might help see if something is not passing :$permanent through? 19:37
rf If I remove Str from the first arg, I get a different error when calling with :permanent, it claims I have only passed 2 args instead of 3, (2 being the obj and the to) 19:41
Seems to omit the passing of :permanent
I think I found the issue. 19:45
rf I don't want to talk aboutit 19:45
Thank you for the backtrace tip, that helped a lot 19:46
Homer_Simpson @lizmat how come doin $conents[0] is actually line 3 19:53
contents[0] is line 3 for some reason 19:54
dont computers read and write files (and to the video buffer) from top to bottom, and right to left
[Coke] Homer_Simpson: need to see code. 19:55
Homer_Simpson and $contents[1] is out of range 19:56
pastebin.com/RFaRVfUy 19:57
[Coke] add a "dd $contents" on line 3 to see what's actually in contents. 19:59
It's a single string with newlines.
m: my $string = "asdf\nasdf\nadsf\n"; dd $string[1]; 20:00
camelia Failure.new(exception => X::OutOfRange.new(what => "Index", got => 1, range => "0..0", comment => Any), backtrace => Backtrace.new)
[Coke] You can't index a string that way. you probably want .lines instead 20:01
then you get something array-ish back that you can index by line number.
Hope that helps
Homer_Simpson Str $contents = "1 0 0 16 0 1 0 0 0 1 0 0 0 1 3024.dat\n1 0 0 8 0 1 0 0 0 1 0 0 0 1 3024.dat\n1 0 0 0 0 1 0 0 0 1 0 0 0 1 3024.dat\n" 20:02
"\n"
I know you normally cant
but elems was working
so I assumed it was an implicit array of strings not a single string 20:03
despite it having the $ sigil
[Coke] you're calling elems on lines of content, not content.
when you do, you get the array. when you don't, you have a string with newlines. 20:04
m: my $a="abc\ndef\nasdf\n123\n"; dd lines($a) 20:05
camelia ("abc", "def", "asdf", "123").Seq
[Coke] it's not implicit, we're explicitly making it an array with lines()
Nemokosch > the one I hate is when you have method x ( $a, :$b ) 20:13
just seen module code like that today - probably not a good idea in the first place
Homer_Simpson bbl 20:19
tonyo CIAvash: i see those changes reflected in the db, the stats job is failing, should be fixed shortly 21:52
tellable6 2023-01-18T11:35:18Z #raku <tbrowder> tonyo ^^^
2023-01-18T12:18:49Z #raku <tbrowder> tonyo now i'm really confused 'cause i now don't need to specilfy the Associative role or the handles and all works as i originally thought it did. probably a late-night ff. back to the drawing board....
stevied www.reddit.com/r/rakulang/comments..._outdated/ 22:07
tonyo CIAvash: should be updated - 22:19
stats is a little more complicated and needs to be done again 22:20
(they're very out of date)
PipStuart Greetings to everyone in #raku! I'm just another mediocre Perl5 hacker who hadn't started learning Raku (or prior Oct2019 Perl6) up until about a week ago. Lots to learn. Thanks in advance for just being willing to help with that. 22:47
Nemokosch Hello, welcome on board 🙂 22:49
PipStuart has a question: If Raku's substr() doesn't allow for replacement within indexed strings, are most such needs now handled with ~~ smart-match && regex substitutions?
Nemokosh: Thank you. =) 22:50
Nemokosch I think there is substr-rw as well
docs.raku.org/routine/substr-rw 22:51
PipStuart Nemokosh: Oh, super-cool. Thanks! I must've missed it.
Nemokosch it returns a writeable part