🦋 Welcome to the MAIN() IRC channel of the Raku Programming Language (raku.org). This channel is logged for the purpose of keeping a history about its development | evalbot usage: 'm: say 3;' or /msg camelia m: ... | Log inspection is getting closer to beta. If you're a beginner, you can also check out the #raku-beginner channel!
Set by lizmat on 25 August 2021.
00:08 reportable6 left 00:11 reportable6 joined 01:11 notable6 left, bisectable6 left, quotable6 left, reportable6 left, benchable6 left, tellable6 left, nativecallable6 left, linkable6 left, committable6 left, unicodable6 left, sourceable6 left, evalable6 left, bloatable6 left, releasable6 left, coverable6 left, greppable6 left, statisfiable6 left, shareable6 left, linkable6 joined, nativecallable6 joined, evalable6 joined, quotable6 joined, bisectable6 joined 01:12 greppable6 joined, benchable6 joined, statisfiable6 joined, tellable6 joined, notable6 joined, committable6 joined 01:13 sourceable6 joined, shareable6 joined, bloatable6 joined, unicodable6 joined, reportable6 joined, coverable6 joined 01:14 releasable6 joined 01:20 p6steve left 01:22 p6steve joined 02:04 falsifian joined
falsifian Is there a way to say a function's return type is Array[Int]? I tried sub f(--> Array[Int]) { return [5]; } but when I call f I see "Type check failed for return value; expected Array[Int] but got Array ([5])" 02:38
03:04 linkable6 left, evalable6 left 03:05 evalable6 joined 03:07 linkable6 joined 03:14 [Coke] left
Juerd falsifian: Array[Int] doesn't mean "any array that only has ints", but it is a type by itself. The [5] is not an Array[Int], but an Array. 03:18
03:20 [Coke] joined
Juerd falsifian: You could declare a variable of type Array[Int] and use that: my Int @foo = 5; return @foo; 03:20
falsifian: Or the same thing without a name: return my Int @ = 5; 03:22
falsifian Juerd: Thanks. This distinction between Array and Array[something] is interesting. Is there somewhere I can read more about that? Is Array shorthand for Array[Mu], or something like that? 03:24
Juerd This is the #1 issue I run into with Raku. Typed array are cumbersome to use, and not all that useful. I've suggested an addition to the language that dwims but it didn't get any traction (see old.reddit.com/r/rakulang/comments...all_type/)
falsifian: Array[Mu] is not the same as Array. The type isn't a mere constraint for the values, it is part of the type of the array itself. 03:25
\\\
\\\AAAAAAAAAAAAAAAAAAAAAAAA
\\Woops
Sorry, almost dropped my laptop but caught it by the keyboard :) 03:26
falsifian phew!
Juerd Hm, I wonder how I typed A's like that. I had the right side where \ and enter are.
falsifian Yeah, I see it's not just a constraint. Just trying to understand how to think about it. Like, are Array and Array[] different classes... but I think there are lower-hanging fruit in my journey into Raku-land. 03:27
Juerd Anyway, I think Array[Mu] could maybe behave like Array in every way except not being compatible with it :D
Every Array[something] is an Array (Array accepts Array[something], but it doesn't accept any Array except one of the exact same type. 03:29
falsifian Could I define my own class that behaves like that? I.e. has a generic form and a parameterized form? 03:30
Or is this unrelated to classes? 03:31
Juerd So you can pass an Array[Int] to f(@foo) but you can't pass an Array to f(Int @foo) except if it's Array[Int] specifically. And since array types are not inferred from values you have to actually have a variable
Array is a class you can have such parameterization on your own classes 03:32
Or maybe role? Hm
afk # bed 03:36
falsifian thx for the tips; 'night
Juerd github.com/rakudo/rakudo/blob/mast...453-L1463= 03:38
Couldn't resist the urge to look it up
It's a class (Array) that when parameterized mixes in a parameterized role (Array::Typed[::Tvalue]) 03:40
github.com/rakudo/rakudo/blob/mast.../Typed.pm6
Okay, I'm gone for real now :)
Ciao
falsifian 'night for real
04:20 evalable6 left, linkable6 left, linkable6 joined 04:23 evalable6 joined 04:52 xinming left 04:55 xinming joined 05:05 xinming left 05:18 xinming joined 05:25 tejr joined, tejr left, tejr joined 05:42 xinming left 05:44 xinming joined 06:03 xinming left, xinming joined 06:08 reportable6 left, reportable6 joined 07:08 reportable6 left, benchable6 left, quotable6 left, shareable6 left, releasable6 left, notable6 left, unicodable6 left, sourceable6 left, nativecallable6 left, committable6 left, tellable6 left, bisectable6 left, statisfiable6 left, coverable6 left, greppable6 left, bloatable6 left 07:09 benchable6 joined, tellable6 joined, committable6 joined, unicodable6 joined, sourceable6 joined, reportable6 joined, releasable6 joined, bloatable6 joined 07:10 quotable6 joined, greppable6 joined 07:11 coverable6 joined, statisfiable6 joined, shareable6 joined, notable6 joined, nativecallable6 joined 07:12 bisectable6 joined 08:12 evalable6 left, linkable6 left, linkable6 joined 08:14 evalable6 joined 08:38 Kaiepi left 08:42 jjido joined 09:03 Kaiepi joined
Nemokosch Array typing is quite hellish in Raku indeed 09:06
09:10 Sgeo left 09:13 eseyman left, eseyman joined 10:06 frost left 10:15 jjido left 10:22 jjido joined 10:49 jjido left, lizmat joined
nine But how else could it work? 10:52
Nemokosch I'm not sure if this is an important question, for me at least 11:12
I'm not in the static typing cult
but if you really want an answer
1. array literals should be able to match against specified types for sure 11:13
2. @ and % sigils should support specified types, at least as syntax sugar for Array[T] and Hash[T]
these are two problems that people always bump into
and indeed, I find their expectation to be more valid than the given behavior 11:14
lizmat but: @ does not mean Array, and % does not mean Hash
@ means Positional, and % means Associative
I think that *that* is the thing you need to grok in Raku
Nemokosch I know but it's not justification that the behavior is consistently wrong 😄 11:16
lizmat m: my class A is Positional { }; sub foo(@a) { dd }; foo A 11:17
camelia sub foo(@a)
Nemokosch I said it should _at least_ work for Arrays and Hashes
preferably it should work for all Positionals and all Associatives
but now that it consistently works for nothing, I don't feel that's a worthy type of consistency
nine What do you mean by "does not work"? 11:19
Nemokosch Unrelated to typing and whateverz, if you asked me about the biggest problems with Raku, I would say 10 occasions out of 10 that it's the useless abstractions of @ and % 11:20
11:20 Sankalp left
lizmat m: sub foo(Array[Int]() $a) { dd $a }; foo (1,2,3) 11:20
camelia Array[Int].new(1, 2, 3)
Nemokosch that pretty much do harm than good and indeed, you regularly hear it from solid users that they almost always avoid them, or sigils altogether
lizmat maybe you need to tell it to coerce ? ^^ 11:21
Nemokosch and give up on using @
nine: I don't remember the details but ^this was exactly what I was thinking of 11:22
lizmat well, @ implies Positional
11:22 Sankalp joined
Nemokosch that the conclusion of people much more knowledgeable than me was that you just gotta give up on @ if you want your typed array work on literals 11:24
and there are loads of things you need to give up on, once you decide to use @
most of them related to proper variable assignment
you cannot properly swap @-sigilled variables
you cannot assign value to them when they are topicalized
nine Do you have some code examples for me? I really have a hard time understanding what the problems with typed arrays are 11:25
lizmat m: sub foo(Array[Int]() $a) { my @b := $a; dd @b }; foo (1,2,3) # perhaps we need some syntactic sugar for this ?
camelia Array[Int].new(1, 2, 3)
Nemokosch No I don't because I don't use them; I've just spent enough time here to notice that others do and god do they often 11:26
lizmat m: sub foo(Array[Int]() $a) { my @b := $a; .say for @b }; foo (1,2,3)
camelia 1
2
3
Nemokosch anyway, as I said, my fundamental problems are with @ and % sigils and the abstractions for them, and as "the design phase of Raku is over", that cannot be helped I think 11:28
I remember Lizmat held a presentation about sigils last year, perhaps that's the best kind of help at this point
nine m: my Int @a = 1, 2, 3; sub foo(@arr) { dd @arr }; foo(@a) 11:29
camelia Array[Int @a = Array[Int].new(1, 2, 3)
nine I guess I just dont get it 11:30
gfldex m: my @a of Int; dd @a; sub foo(@a of Int) { dd @a; }
camelia ===SORRY!=== Error while compiling <tmp>
Cannot resolve caller trait_mod:<of>(Parameter:D, Int:U); none of these signatures matches:
(Mu:U $target, Mu:U $type)
(Routine:D $target, Mu:U $type)
at <tmp>:1
gfldex ^^^ This may be part of the cause of cunfusion. 11:31
Nemokosch nine: you didn't have to pass a scalar to a function 11:32
sorry, not scalar
literal of course
and indeed - why should it behave differently from the array assignment itself?
the array assignment could take "the literal", which might not have been a literal idk the implementation 11:33
nine m: sub foo(Int @arr) { dd @arr }; foo([1,2,3])
camelia Type check failed in binding to parameter '@arr'; expected Positional[Int] but got Array ([1, 2, 3])
in sub foo at <tmp> line 1
in block <unit> at <tmp> line 1
nine So we are solely talking about something like this ^^^?
Nemokosch but then we are back to my personal point that "list assignment" is one of the problems, moreover one of the biggest problems in Raku 11:34
yes
nine I think that could be made to work in the Binder. But it would also have a high runtime cost (if used). 11:35
Nemokosch and then it would nice if hardcoded literals didn't have big runtime overhead 11:36
nine That's possible for assignment, not for passing as argument 11:37
Nemokosch which makes you wonder about the design ^^ 11:38
anyway, I have to go now, and as I said: I wouldn't say a thing if Raku had no typing whatsoever so I'm not knowledgeable in the problems of it either
If you want me to complain, just ask about @, %, list assignment, this stuff
oh yeah and != and ne not being proper first-class operators 11:39
but about that I think half of the people who ever came across it complained
nine I don't want complaints. I want solutions. My very first question was literally "But how else could it work?"
Nemokosch Liz even proposed a change at some point 11:40
Then sometimes you have to accept that the design itself can be faulty
I can tell you how I personally, or people I've come across, expected it to work, and maybe the reasoning behind 11:41
if that's not feasible, frankly that is neither my/our problem, nor a relieving resolution 11:42
then really just the complaint remains, which is feedback like anything else
I try to give positive feedback quite regularly, too, so I think it's fair
gfldex m: constant term:<@c> = Array[Int](); @c = 1,2,3; dd @c; 11:57
camelia Cannot resolve caller STORE(Array[Int](Any):U: List:D); none of these signatures matches:
(Array:D: Iterable:D \iterable, *%_ --> Array:D)
(Array:D: QuantHash:D \qh, *%_ --> Array:D)
(Array:D: Mu \item, *%_ --> Array:D)
in block …
gfldex m: constant term:<@c> = my @ = Array[Int](); @c = 1,2,3; dd @c; 11:58
camelia Array @ = [1, 2, 3]
gfldex Array[Int]() in a signature is kind of an ENODOC. 11:59
12:02 xinming left 12:04 xinming joined 12:07 reportable6 left 12:08 reportable6 joined 12:14 eseyman left 12:32 eseyman joined
lizmat fwiw, I was surprised it appears to work | works 12:38
13:10 eseyman left 13:35 eseyman joined 13:40 Oshawott joined 13:43 archenoth left 13:44 lizmat left 14:44 sourceable6 left, linkable6 left, bloatable6 left, releasable6 left, evalable6 left, nativecallable6 left, bisectable6 left, committable6 left, coverable6 left, unicodable6 left, benchable6 left, reportable6 left, greppable6 left, shareable6 left, tellable6 left, quotable6 left, statisfiable6 left, notable6 left 14:45 tellable6 joined, notable6 joined, committable6 joined, unicodable6 joined, sourceable6 joined, benchable6 joined, bisectable6 joined 14:46 bloatable6 joined, coverable6 joined 14:47 greppable6 joined, linkable6 joined, quotable6 joined, releasable6 joined, reportable6 joined, nativecallable6 joined, statisfiable6 joined, evalable6 joined, shareable6 joined 15:37 Sankalp- joined, Sankalp left, Sankalp- is now known as Sankalp
tbrowder m: constant \2pi = 2 * pi; say 2pi 15:49
camelia ===SORRY!=== Error while compiling <tmp>
Missing initializer on constant declaration
at <tmp>:1
------> constant⏏ \2pi = 2 * pi; say 2pi
tbrowder m: constant Real \2pi = 2*pi; say 2pi 15:50
camelia ===SORRY!=== Error while compiling <tmp>
Missing initializer on constant declaration
at <tmp>:1
------> constant Real⏏ \2pi = 2*pi; say 2pi
tbrowder any way to define a constant with a leading digit? 15:52
nine m: say tau == 2 * pi 16:00
camelia True
nine hides
tbrowder m: constant _2pi = 2*pi; say _2pi 16:09
camelia 6.283185307179586
tbrowder that's good enough
at least for now. lizmat: any way to define a constant with a leading digit 16:11
16:17 Oshawott left 16:36 kueppo joined 16:51 kueppo left
coleman I'm going live on Twitch to try and deploy some raku code www.twitch.tv/keyvalue 17:00
sjn is on twitch now, listening/looking in 17:21
coleman cool, thanks for the audio tip
i don't stream much
17:51 linkable6 left, evalable6 left, evalable6 joined 17:53 linkable6 joined 18:07 reportable6 left 18:10 reportable6 joined
coleman done for now, sjn thanks for tuning in; And thanks to whoever helped me on reddit www.reddit.com/r/rakulang/comments...no_docker/ 18:28
I didn't try 6pm this time, I just tarred everything up. I'll try 6pm another time. Gotta automate stuff more for now. 18:29
18:40 melezhik joined
melezhik coleman you can try out github.com/melezhik/sparrowdo as well if you need to automate VM provisioning 18:40
or even Sparky for distributed setups - github.com/melezhik/sparky#job-api 18:41
coleman melezhik: I was thinking about your project yea 18:42
Would you be willing to host a nightly build of the docs site? 18:43
I have added my own here buildkite.com/de-limited/docs-dot-raku-dot-org
I have a packer file that has the dependencies. They are fairly minimal. I was pleased at how minimal, actually. 18:44
there is nodejs involved, though :)
melezhik I see ... what kind of help you need?
coleman I will send you a DM 18:45
melezhik sure
I don't have a permanent connection with IRC - so you send me to email as well 18:46
coleman oh that's better. Is that on your github?
melezhik yes
coleman okay, I'll email you :)
melezhik thanks
18:48 melezhik left 19:15 Sgeo joined 19:17 lichtkind joined 19:34 dmc00 left 19:36 lizmat joined 19:37 jjido joined
lizmat tbrowder: I guess you could create a constant / variable with a leading digit. But then you wouldn't be able to use it :-) 19:39
tbrowder gotcha … trying again 19:41
m: constant 2pi = ‘foo’; say 2pi 19:42
camelia ===SORRY!=== Error while compiling <tmp>
Missing initializer on constant declaration
at <tmp>:1
------> constant⏏ 2pi = ‘foo’; say 2pi
tbrowder m: constant Str 2pi; 19:43
camelia ===SORRY!=== Error while compiling <tmp>
Missing initializer on constant declaration
at <tmp>:1
------> constant Str⏏ 2pi;
tbrowder ok, i give up, thnx
19:45 lizmat left
ugexe identifier cant start with a number or have a number after a dash 20:02
i.e. 2pi and pi-2 are both not valid
m: class 2pi { } 20:03
camelia ===SORRY!=== Error while compiling <tmp>
Unable to parse class definition
at <tmp>:1
------> class⏏ 2pi { }
expecting any of:
generic role
20:45 evalable6 left, linkable6 left, evalable6 joined 20:48 linkable6 joined 21:20 Guest78 joined 21:21 discord-raku-bot left 21:22 discord-raku-bot joined
gfldex m: constant term:<2pi> = 2 * π; 21:29
camelia ( no output )
gfldex tbrowder: ^^^
tbrowder m: constant term:<2pi> = 2*pi; say <2pi>; say 2pi 21:32
camelia 2pi
6.283185307179586
tbrowder m: constant term:<2pi>=pi*2; say 2*2pi 21:33
camelia 12.566370614359172
tbrowder gfldex: very VERY cool, thanks a heap—how good is our sweet raku!! 21:35
21:44 lichtkind left 21:51 Guest78 left 22:01 clarjon_1 left, jrjsmrtn left
tbrowder the above works, but i need it to work as input to a sub… 22:15
m: sub f($a) { say $a }; constant term<2pi> = 2*pi; f 2pi 22:18
camelia ===SORRY!=== Error while compiling <tmp>
Missing initializer on constant declaration
at <tmp>:1
------> sub f($a) { say $a }; constant term⏏<2pi> = 2*pi; f 2pi
tbrowder forgot colon
m: constant term:<2pi> = 2*pi; sub f($a) { say $a}; f 2pi; f(2pi) 22:20
camelia 6.283185307179586
6.283185307179586
tbrowder ok, that seems to work.. 22:22
but it doesn’t on my laptop :-( 22:47
is camelia bleeding edge raku? 22:48
m: say $*VERSION
camelia Dynamic variable $*VERSION not found
in block <unit> at <tmp> line 1
tbrowder m: say $*VER
camelia Dynamic variable $*VER not found
in block <unit> at <tmp> line 1
tbrowder m: say $*RAKU 22:51
camelia Raku (6.d)
tbrowder m: -v 22:52
camelia ===SORRY!=== Error while compiling <tmp>
Undeclared routine:
v used at line 1
23:01 linkable6 left, evalable6 left 23:03 linkable6 joined, evalable6 joined 23:11 jjido left