🦋 Welcome to Raku! raku.org/ | evalbot usage: 'p6: say 3;' or /msg camelia p6: ... | irclog: colabti.org/irclogger/irclogger_log/raku
Set by ChanServ on 14 October 2019.
notagoodidea timotimo: You loose the timezone information going from Instant to Datetime. 00:31
m: say DateTime.now; say DateTime.now.Instant.DateTime;
camelia 2021-01-17T01:31:23.899945+01:00
2021-01-17T00:31:23.903384Z
notagoodidea Getting the stat info for .IO.changed & co go through loops but come through an Instant. 00:34
00:37 linkable6 left, evalable6 left 00:39 evalable6 joined 00:40 linkable6 joined
notagoodidea And when DateTime.new get an Instant, the timezone is expected to be provided by :$timezone set to 0 by default and do not take $*TZ into account. 00:40
m: say DateTime.new(DateTime.now.Instant); say "---"; say DateTime.new(DateTime.now.Instant, timezone => $*TZ) 00:41
camelia 2021-01-17T00:41:06.349359Z
---
2021-01-17T01:41:06.357140+01:00
00:46 pecastro left 01:04 Kaiepi joined, Kaeipi left 01:18 lucasb left 01:24 notagoodidea left 01:30 lancew left 01:34 JRaspass joined 01:35 Black_Ribbon left, Black_Ribbon joined, mowcat left 01:47 tyilanmenyn is now known as tyil 01:48 moon-child left 01:50 moon-child joined 02:04 earnestly left 02:28 Garbanzo joined 02:35 kvw_5_ joined 02:39 kvw_5 left 02:43 mowcat joined 02:50 Sgeo left 02:53 Sgeo joined 02:54 moon-child left 03:02 Manifest0 left 03:04 Manifest0 joined 03:17 brtastic left 03:27 sono__ joined 03:28 Kaeipi joined 03:30 HarmtH joined, JRaspass left, Manifest0 left, tomaw joined, Black_Ribbon left, Kaiepi left 03:31 Manifest0 joined 03:32 ribasushi joined 03:41 moon-child joined 04:12 kini left 04:14 kini joined 04:23 __jrjsmrtn__ joined 04:26 _jrjsmrtn left 04:27 oneeggeach joined, oneeggeach left 04:29 pnu__ left, pnu__ joined 04:48 mowcat left 04:51 JRaspass joined 05:14 kini left 05:15 kini joined 05:21 JRaspass left 05:54 Sgeo left 05:58 Sgeo joined 06:32 rindolf joined 06:48 kini left 06:49 kini joined 07:07 brtastic joined 07:39 ensamvarg3 joined 07:42 parabolize left 07:45 dataangel left 08:02 brtastic1 joined 08:03 tomaw left, nine left, tomaw joined, nine joined, brtastic left, brtastic1 is now known as brtastic 08:04 rindolf left 08:05 rindolf joined 08:21 wamba joined 08:50 kini left 08:51 kini joined 09:01 sxmx left 09:17 kentnl left 09:19 kent\n joined 09:25 sono__ left 09:27 kent\n left, kentnl joined 09:30 kentnl is now known as kent\n 09:33 sjm_uk joined 09:42 earnestly joined 09:44 sena_kun joined 09:48 Garbanzo left 10:46 Sgeo left 10:54 Xliff joined 11:30 Altai-man joined 11:33 sena_kun left 11:43 murilorios joined 11:52 sjm_uk left 12:17 stoned75 joined 12:25 pecastro joined 12:27 mightypork_ joined
mightypork_ Hello! I'm doing the Raku course (course.raku.org) and finding many typos and mistakes. How can I best report / help fix these? 12:29
lizmat issues / PR's at github.com/ash/raku-course
and thank you for your interest! 12:30
mightypork_ Okay, I'll try to make a PR. Thanks 12:31
lizmat ++mightypork_ 12:33
12:43 PimDaniel joined
PimDaniel @lizmat: hi, i could resolve my problem, silly me i was stucked to the routine side but one of my callers had a constant litteral int into it. 12:45
lizmat so that was essentially binding :-)
my constant $foo = 42 is syntactic sugar for my $foo = BEGIN 42 12:46
my constant $foo = 42 is syntactic sugar for my $foo := BEGIN 42
PimDaniel May constant not CONTAIN a '$'? Je confonds peut-être avec Golang. :( 12:47
NO: constant LIBPATH = '/path/to/start'; is correct too! 12:49
lizmat It may contain a sigil, which makes it easier to interpolate constants in strings 12:54
m: my constant $foo = 42; say "the answer is $foo"
camelia the answer is 42
lizmat m: my constant foo = 42; say "the answer is {foo}"
camelia the answer is 42
PimDaniel i tried : it works! 12:56
I prefert the non $ version : this presents more the difference between variables and constants. 12:57
New question: 12:58
lizmat sure, TIMTOWTDI :-)
PimDaniel Is there a way to make a sub prototype which 1/ accept one or more parameters? 2/Each parameters is a tuple or a triplet? 13:00
lizmat m: sub foo($a, $b = 666) { dd $a, $b }; foo 42; foo 42, 378 13:02
camelia 42
666
42
378
lizmat by specifying a default, you make the positional parameter optional
an alternate way is to use named parameters, which are by default optional
m: sub foo($a, :$bar = 666) { dd $a, $bar }; foo 42; foo 42, bar => 378 13:03
camelia 42
666
42
378
PimDaniel i need to make my sub assert be able to handle this : assert ($a, '>', $b), ($c, '<=', $d), ...
lizmat ah, like that...hmmm
PimDaniel None of my questions are easy. 13:04
sorry!
Probably an hash would not be weird? 13:05
Heu non!
lizmat m: sub assert(**@tests) { dd @tests }; assert <a b c> 13:06
camelia Array element = [("a", "b", "c"),]
lizmat m: sub assert(**@tests) { dd @tests }; assert <a b c>, <d e f>
camelia Array element = [("a", "b", "c"), ("d", "e", "f")]
lizmat m: sub assert(**@tests where all(@tests>>.elems) == 3) { dd @tests }; assert <a b c>, <b c d> 13:07
camelia Array element = [("a", "b", "c"), ("b", "c", "d")]
PimDaniel i'll do the job since i cat do 2 subs this one calling the other.
lizmat m: sub assert(**@tests where all(@tests>>.elems) == 3) { dd @tests }; assert <a b c>, <b c d e>
camelia Constraint type check failed in binding to parameter '@tests'; expected anonymous constraint to be met but got Array ([("a", "b", "c"), ("...)
in sub assert at <tmp> line 1
in block <unit> at <tmp> line 1
cog m: my Int @a; sub a( --> Positional[Int] ){ @a }
camelia ( no output )
PimDaniel Nice: this adds control 13:08
cog Is there a shorter way to say I return an array of Int ? This syntax gets tedious fast/
PimDaniel Well i need to try a few... 13:09
cog m: my Int @a; sub a( --> @Int ){ @a }
camelia 5===SORRY!5=== Error while compiling <tmp>
Malformed return value
at <tmp>:1
------> 3my Int @a; sub a( -->7⏏5 @Int ){ @a }
lizmat cog: how would you do a signature that accepts only an array of Int ? 13:11
but I don't think you can do this atm, but would gladly be proven wrong :-)
cog @Int ? Looks like a variable though
notandinus cog: look into subset 13:12
cog m: my Int @a; sub a( --> Int[] ){ @a } 13:15
camelia ( no output )
cog yea
lizmat m: my Int @a; sub a( --> Int[] ){ @a }; a 13:16
camelia Type check failed for return value; expected Int but got Array[Int] (Array[Int].new())
in sub a at <tmp> line 1
in block <unit> at <tmp> line 1
cog m: my Int @a; sub a( --> Int[] ){ @a }; @a = a()
camelia Type check failed for return value; expected Int but got Array[Int] (Array[Int].new())
in sub a at <tmp> line 1
in block <unit> at <tmp> line 1
lizmat it compiles, but does not doe what you want
*do
cog Indeed
It is parametrising the Int type
I like signatures. It is part of what makes raku so better than Perl. A shorter syntax would be nice. 13:18
13:19 sjm_uk joined
cog notandinus, I looked into subset. I am not sure how it can be relevant. 13:20
notandinus m: subset Test of Array[Int]; my Int @a; sub (--> Test) { @a }; a
camelia 5===SORRY!5=== Error while compiling <tmp>
Undeclared routine:
a used at line 1
notandinus m: subset Test of Array[Int]; my Int @a; sub a (--> Test) { @a }; a 13:21
camelia ( no output )
notandinus cog: ^
cog notandinus, thx
But the notion it is a Positional is lost, which was the very reason I used a signature 13:22
But for compiling check, it is good. 13:23
notandinus what does it being positional mean? 13:24
i'm not sure but you can probably do Positional[Int]
m: subset Test of Positional[Int]; my Int @a; sub a (--> Test) { @a }; a
camelia ( no output )
cog Yes, but nothing in the Test name indicates to the users it is a positional 13:25
A positional is a role of arrays btw. I would say THE role.
And the sigil conveys that. 13:26
But sigils seem to be for variable only, not types 13:27
That would confuse things, I suppose. 13:29
my @int \i # going on another tangent. 13:30
m: my Int @a; sub a( --> @[Int] ){ @a }; @a = a() 13:34
camelia 5===SORRY!5=== Error while compiling <tmp>
Malformed return value
at <tmp>:1
------> 3my Int @a; sub a( -->7⏏5 @[Int] ){ @a }; @a = a()
cog my @[Int] @a; sub a( --> @[@[Int]] ){ @a }; @a = a() # a Positional of Positionals of Ints 13:38
13:41 murilorios left 13:52 sena_kun joined
PimDaniel I realize that i can't even push a Str into an Str List using for. for <aaa bbb ccc> -> $one { push @a, $one} does not seam to work. 14:13
heu Sorry : yes it works : or @a.push($one) 14:18
14:24 Altai-man left
masak PimDaniel: also, you can usually `push @a, @an-entire-array` instead of looping and pushing per item 14:25
PimDaniel masak: Thank's, Yes, true but i receive a scalar from a sub multi-calls. 14:27
masak I see :) 14:28
PimDaniel How to chech if $x is not Nil? my $x = mysub(...); if not $x is Nil {...} does not seam to work :(. 14:37
14:37 wamba left 14:44 lucasb joined
masak m: my $x = Nil; say $x === Nil 14:45
camelia False
masak m: my $x = Nil; say $x 14:46
camelia (Any)
PimDaniel masak: i need to check if it is Nil (or not). 14:48
14:49 wamba joined
PimDaniel my Str $str; $str = 'fdsfdsf'; say $str === Nil => returns always False. :( 14:49
masak yes, I understand. however, the above two evaluations seem to indicate that Nil evaporates when stored in variables
maybe Nil isn't quite a first-class value 14:50
timotimo storing Nil into a variable resets the variable to its default value
you can use binding instead to keep the Nil around
PimDaniel timotimo : True !
masak m: for [1, Nil, 2] -> $x { say $x }
camelia 1
(Any)
2
timotimo m: my $a is default(99); say $a; $a = 9; say $a; $a = Nil; say $a 14:51
camelia 99
9
99
14:53 aindilis` joined
PimDaniel I have a sub that returns a message, but does not even touches to its internal $msg when there's no error. Probalbly should i initialize the $str string empty? 14:53
14:57 aindilis left
PimDaniel Now how to check if a Str is empty? 15:05
15:06 murilorios joined, murilorios left
timotimo if you "has Str $.msg", the default value would be Str, i.e. the Str type object. you can check if it's === Str, or you could check that it's not ".defined" 15:11
if you're fine with empty strings also being considered "empty", then you can just boolify the string, because in raku only the empty string is false, and type objects as well 15:12
15:13 parabolize joined
PimDaniel What do you exactly mean by boolify? I just need since 2 hours to check if my string is empty. 15:15
On thing that should be simple i guess!
timotimo `if not $.msg { say "oh no its empty!" }` 15:16
PimDaniel Doesn't work! 15:20
timotimo more details please 15:23
PimDaniel Heu : Sorry ! fogot a ;
works! 15:24
Thanks!
tbrowder hi 15:28
back in november i asked about "include"ing a file during compulation (simlar to C/++ "include") and [Coke] suggested: colabti.org/irclogger/irclogger_lo...11-25#l149 15:29
I'm facing the problem again and wonder if a module might do the trick more safely as [Coke] suggested. 15:30
15:32 sena_kun left
tbrowder here is the situation: i have a class in module X::Y.rakumod and I autogenerate part of the methods. Currently I generate them in the proper format and copy/paste them into Y.rakumod. 15:32
I would like use a module but how can I do that so they appear to be called by the class in Y.rakumod? 15:33
*use a separate module which i can autogenerate and "use". 15:34
e.g.: use X::Y; my $c = Foo.new; $c.some-method; # where .some-method is in another physical method? 15:37
15:37 Manifest0 left
tbrowder i know i can use a wrapper for each module inside Y.rakumod, but that seems clunky and is just asking for more trouble. 15:38
*each method
*is in another module file. 15:39
back later, bye.
15:39 sjm_uk left 15:46 sena_kun joined 15:50 Garbanzo joined
PimDaniel Can't join separator from a list :(! 15:50
From an arraystr to a scalar. 15:51
Said variable returns each element by lines. :( 15:52
strange!
Where could i found example of that? 15:53
15:54 Manifest0 joined 16:04 b2gills left, japhb left 16:05 stoned75 left, b2gills joined, stoned75 joined 16:06 Garbanzo_ joined 16:07 wamba left 16:08 Garbanzo left, stoned75 left 16:09 japhb joined, stoned75 joined 16:10 wamba joined, wamba left 16:14 sena_kun left
tbrowder ah, roles or inheritance might work, just a bit more effort. however, an 16:16
"include" feature would be very useful. 16:18
later...
timotimo roles are for code sharing, inheritance is for when one type is an acceptable substitute for another in certain circumstances (liskov substitution principle)
16:20 sena_kun joined 16:21 Garbanzo joined 16:23 Garbanzo_ left 16:30 sjm_uk joined 16:36 Garbanzo left 16:43 mhinz left 17:05 MasterDuke joined 17:36 aindilis` left 18:05 sjm_uk left 18:06 aindilis joined
PimDaniel I'm back! 18:10
perry Hi back, I'm perry! 18:11
18:11 ensamvarg3 left
PimDaniel 18:11
Suppose a sub myspersub(Int $a , Str $b, Int $c) { say $a.VAR.name; }; Suppose a list of triplet : my @list = (($inta,$str1,$intb),($intc,$str2,$intd); for @list -> $ref {my ($a,$b,$c) = @($ref); mysupersub($a,$b,$c); The problem is i need the original name not the loop ones which will allways be $a 18:23
18:24 stoned75 left
PimDaniel To say it in another style : how to call mysupersub with a kind of reference to the originals variables? 18:25
In other words : i need $inta, not $a. 18:28
18:32 natrys joined 18:37 aborazmeh joined, aborazmeh left, aborazmeh joined 18:38 Garbanzo joined 19:12 PimDaniel left 19:13 Garbanzo left, Garbanzo joined 19:15 Garbanzo_ joined 19:16 Garbanzo left, wamba joined 19:21 Garbanzo_ left, Garbanzo_ joined 19:26 Garbanzo_ left 19:30 Garbanzo joined, Altai-man joined 19:32 sena_kun left 19:34 Garbanzo_ joined 19:36 Garbanzo left 19:57 Sgeo joined 19:59 Garbanzo_ left
mightypork_ Is there some raku "etymologic dinctionary" where I could find why e.g. '.so 20:00
.so is called .so as in "say $value.so; # True"?
or why .WHAT isn't .type 20:01
El_Che so true and so false? 20:03
mightypork_ yeah. The only thing I can come up with is it being an obscure reference to Picard's "Make it so" 20:04
El_Che so is also a routine 20:05
so $foo => true
mightypork_ I'm doing the Course and it was introduced here as a kind of operator course.raku.org/essentials/coercion/prefixes/ 20:06
20:10 thundergnat joined, mightypork_ is now known as MightyPork 20:11 JRaspass joined
thundergnat MightyPork: We have a glossary of terms somewhere. 20:11
github.com/Raku/old-design-docs/bl...ossary.pod May not be the most recent link.
and .so isn't in there anyway 20:12
MightyPork this is a better link probably but yeah it ain't there - docs.raku.org/language/glossary
thundergnat It's a play on the question: "Is that not so? It is not. or It is so. 20:13
20:13 stoned75 joined
thundergnat It's the opposite of not 20:13
El_Che design.raku.org/S03.html#Loose_unary_precedence 20:14
MightyPork Oh, that makes sense. If the course introduced .not, I would have probably connected the dots
thundergnat Coerces the result of an expression to a Boolean
MightyPork 'so' and 'not' are the same as the prefix operators ? and !?, right? 20:16
thundergnat They perform the same function but are (I believe) looser precedence. 20:17
MightyPork dont actually need the question mark in the second case
thundergnat Similar to && and and, and || and or. 20:18
Geth doc/master: 8 commits pushed by (Stoned Elipot)++ 20:19
20:22 b2gills left 20:23 b2gills joined, sxmx joined 20:31 thundergnat left 20:38 aborazmeh left 20:39 aborazmeh joined, aborazmeh left, aborazmeh joined 20:44 aborazmeh left 20:58 notagoodidea joined
notagoodidea m: use nqp; say nqp::time_n(); 21:00
camelia 1610917205.0564768
notagoodidea m: use nqp; say DateTime.new(nqp::time_n(), timezone => $*TZ); 21:06
camelia 2021-01-17T22:06:33.298770+01:00
21:15 notagoodidea left
gfldex lolibloggedalittle: gfldex.wordpress.com/2021/01/17/in...-labeling/ 21:15
notandinus: ^^^ this one is for you
lizmat feels a PR coming :-) 21:18
perry Introspective labelling? Who told you the name of my secret band? 21:19
21:20 brtastic left
perry (Er, actually on topic): wow, I didn't actually know Raku had such a fancy Label-thingy. That's really neat. 21:21
El_Che perry: wasn't "distesctive libel"? 21:22
disrespective 21:23
perry No, but they opened for us.
(Whom they were opening for considering the band was secret, I can't say)
Er, whom they were opening to* 21:29
21:39 natrys left 21:42 MasterDuke left 22:02 Garbanzo joined 22:06 vrurg left, telex left, vrurg_ joined 22:07 Altai-man left, telex joined
[Coke] m: FOO: say 'hi' ; goto FOO 22:14
camelia hi
Label.goto() not yet implemented. Sorry.
in block <unit> at <tmp> line 1
22:16 rindolf left, xelxebar left, tejr left, asymptotically left
MightyPork say "{$x.WHAT}"; # says 'Use of uninitialized value of type Int in string context.'. 22:20
why cant I do this? Also, what is uninitialized? 22:21
$x is a Int
El_Che $x is uninitialized? 22:22
22:22 xelxebar joined
tadzik m: my $x = 5; say $x.WHAT.defined 22:22
camelia False
22:22 asymptotically joined
MightyPork it's not, my Int $a = 156; 22:22
tadzik ^ maybe that's what it's complaining about 22:23
MightyPork and it works fine without doing the string interpolation
tadzik though it's arguable whether or not a type object is initialized or not ;)
m: my $x = 5; say "{$x.WHAT.^name}"
camelia Int
El_Che m: $x=156; say "{$x.WHAT}";
camelia 5===SORRY!5=== Error while compiling <tmp>
Variable '$x' is not declared
at <tmp>:1
------> 3<BOL>7⏏5$x=156; say "{$x.WHAT}";
El_Che m: my $x=156; say "{$x.WHAT}"; 22:24
camelia Use of uninitialized value of type Int in string context.
Methods .^name, .raku, .gist, or .say can be used to stringify it to something meaningful.

in block <unit> at <tmp> line 1
tadzik ah yes, it's all in the error message :)
El_Che m: my $x=156; say $x.WHAT;
camelia (Int)
22:24 aborazmeh joined, aborazmeh left, aborazmeh joined
El_Che indeed: great error 22:24
MightyPork I don't understand
22:25 tejr joined
El_Che it's complaining you are casting something undefined to string 22:25
tadzik m: say "{Int}"
camelia Use of uninitialized value of type Int in string context.
Methods .^name, .raku, .gist, or .say can be used to stringify it to something meaningful.

in block <unit> at <tmp> line 1
tadzik ^ that's what you're effectively doing
El_Che in other languages you would get a panic
MightyPork but why is it not undefined if you just `say $x.WHAT`. you get (Int)
El_Che that's the type not the value 22:26
you cast values, not types
tadzik it is a good question why wrapping it in quotes "silences" the error, seemingly
erm, unwrapping &
vrurg_ m: say Int.gist; 22:27
camelia (Int)
tadzik I'd say the non-quoted form kind of works by accident
vrurg_ m: say Int.Str
camelia Use of uninitialized value of type Int in string context.
Methods .^name, .raku, .gist, or .say can be used to stringify it to something meaningful.

in block <unit> at <tmp> line 1
tadzik ah, there we go
vrurg_ This is what happens.
MightyPork if I do say $x.WHAT.WHAT, it's still (Int). Does .WHAT return some kind of "typed undefined"?
tadzik where's FROGGS when we need to make a "what what" joke again :(
vrurg_ docs.raku.org/routine/say#(IO::Han...method_say – this is where it's explained what `say` actually does. 22:28
22:29 vrurg_ is now known as vrurg
MightyPork ah its like the debug print in rust, {:?}. say "{$x.WHAT.gist}" works perfectly 22:29
vrurg tadzik: It's certainly not by accident. It's on purpose. :)
tadzik so when you say() something, it does its best to turn it into a meaningful string: so it calls a .gist on it, and you don't see an error. If you interpolate it in a string, it tries to treat it as a Str, which triggers the error, even though the end result is pretty much the same
vrurg: right, I see it now :) 22:30
MightyPork so .WHAT gives me the "class" of the object? until now I obviously mistakenly thought it's a string 22:31
tadzik yes, it gives you the type object
MightyPork but that doesnt explain why chained WHAT is still the same
tadzik ^name on that gives you a name, as a string (I think) 22:32
m: 5.WHAT.^name.WHAT.say
camelia (Str)
tadzik yep
m: 5.WHAT.WHAT.WHAT.WHAT.^name.say
camelia Int
vrurg MightyPork: because Int is an Int, event it's not instantiated yet/undefined. 22:33
22:33 Sgeo left
MightyPork can I think of it as javascript prototype? 22:33
El_Che www.youtube.com/watch?v=_3PUu88nOcw
vrurg MightyPork: no way. Not even close. Don't. Forget. Wipe your brain! :D
MightyPork ok ok going back to the Course lol 22:34
vrurg Cerberus remains calm as he knows no Closure. 22:35
22:38 Sgeo joined 23:01 aborazmeh left 23:10 wamba left 23:19 asy joined 23:21 asymptotically left, b2gills left, tomaw_ joined, tomaw left, JRaspass left 23:22 b2gills joined 23:33 Sgeo left 23:35 Sgeo joined