»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'p6: say 3;' or rakudo:, or /msg camelia p6: ... | irclog: irc.perl6.org or colabti.org/irclogger/irclogger_logs/perl6 | UTF-8 is our friend!
Set by moritz on 22 December 2015.
ipatrol AlexDaniel: can you amend the commit to link to my github page? 00:05
github.com/ipatrol
raschipi Soon Zoffix will get you to work for him. 00:10
ipatrol lol 00:14
Anyway, is there a way to have one hash partially overwrite another, similar to push(), but without the array semantics? 00:15
raschipi Yes 00:16
ipatrol raschipi: which is...? 00:18
raschipi No idea.; I just remember there is a simple way.
It's common for people to ask in the channel. I don't remember what the solution is, though. 00:19
ipatrol raschipi: python has dict.update(), I can only presume P6 has something similar
raschipi Let me think about it for one minute more. 00:20
grondilu Is there a simple way to "negate" an Order? 00:21
lol nevermind I can just reverse the arguments
:P
(silly thing is : that's what I did, but I forgot I did it :/) 00:22
raschipi ipatrol: Maybe %h{%g.keys} = %g.values ? 00:23
grondilu can you rely on them being in the same order? 00:24
raschipi Yes, it will call sort beforehand.
timotimo not sure if .keys and .values are always guaranteed to be in sync? 00:25
grondilu you may need a prefix:<|> though
raschipi Worked for me without the slip
ipatrol m: %h = 'a'=>'b','c'=>'d'; %g = 'f'=>'g','c'=>'e'; %h{%g.keys} = %g.values; say %h;
camelia 5===SORRY!5=== Error while compiling <tmp>
Variable '%h' is not declared
at <tmp>:1
------> 3<BOL>7⏏5%h = 'a'=>'b','c'=>'d'; %g = 'f'=>'g','c
timotimo my at the very beginning
ipatrol m: my %h = 'a'=>'b','c'=>'d'; my %g = 'f'=>'g','c'=>'e'; %h{%g.keys} = %g.values; say %h;
camelia {a => b, c => e, f => g}
raschipi how do I ask the bot to link source? Most compli9cated bot ever that one
ipatrol m: my %h = 'a'=>'b','c'=>'d'; my %g = 'f'=>'g','c'=>'e'; %h.push(%g); say %h; 00:26
camelia {a => b, c => [d e], f => g}
grondilu evalable6: help
evalable6 grondilu, Like this: evalable6: say ‘hello’; say ‘world’ # See wiki for more examples: github.com/perl6/whateverable/wiki/Evalable
raschipi SourceBaby: help
SourceBaby raschipi, Use s: trigger with args to give to sourcery sub. e.g. s: Int, 'base'. See modules.perl6.org/dist/CoreHackers::Sourcery
grondilu lol I found the evalbot help on first try :)
ipatrol raschipi: at any rate, it seems like something that ought to exist as a method. Perhaps a feature request is in order? 00:27
timotimo m: my %h = :1a, :1c; my %g = :2a, :3g; my %comb = %h, %g; say %comb
camelia {a => 2, c => 1, g => 3}
timotimo this is probably more correct
raschipi ipatrol: It does exist, I just don't remember what it is.
ipatrol timotimo: that would be a non-destructive way to do it, apparently 00:28
timotimo well, you can also %h ,= %g 00:29
m: my %h = :1a, :1c; my %g = :2a, :3g; %h ,= %g; say %h
camelia {a => 2, c => 1, g => 3}
timotimo ^- there you go
raschipi there it is, told you ipatrol
thanks timotimo 00:30
ipatrol so the comma operator joins hashes?
raschipi ope, comma operator builds lists 00:31
nope*
ipatrol raschipi: normally, but I take it in hash context it will join hashes?
or more precisely, it turns both hashes to lists of pairs, makes a list of each of them, and when one then assigns that nested list to a hash container, it is then flattened? 00:33
timotimo that's how i assume it goes, yeah
raschipi Not the comma operator
The asignement to the hash does that
ipatrol m: my %h = :1a, :1c; my %g = :2a, :3g; say %h, %g; 00:34
camelia {a => 1, c => 1}{a => 2, g => 3}
timotimo yes, the list assignment part is the important bit
raschipi m: my %h = :1a, :1c; my %g = :2a, :3g; dd (%h, %g); 00:36
camelia ({:a(1), :c(1)}, {:a(2), :g(3)})
ipatrol would love a debug mode that will tell you what is the canonical equivalent, in terms of explicit function calls, of whatever was just executed 00:37
raschipi Not everything can be done with function calls
raschipi OPerators don't need to map to function calls. Some are even special cased in the compiler and there would be no way of doing what the do with function calls. 00:38
timotimo a desugar module would be nice
i'd say it'd be fine to "bottom out" in those cases without making it any simpler 00:39
ipatrol right, what timotimo said
grondilu what's the syntax to make a unicode character from its english description?
ipatrol \c[NAME] 00:40
grondilu oh yeah, thanks
timotimo there's also a function for that 00:41
ipatrol \c[YOU ARE WELCOME]
MasterDuke ipatrol: it's not quite exactly what you said. but if you use MVM_COVERAGE_LOG=<something> and MVM_COVERAGE_CONTROL=1, you could put an nqp::coveragecontrol(1) right before the part you're interested in and nqp::coveragecontrol(0) right after 00:45
ipatrol MasterDuke: I have no idea how one would even go about doing that
are those pragmas or something? 00:46
MasterDuke and the log would show you what lines in the rakudo source are being executed
environment variables
AlexDaniel ipatrol: aw yeah, should've use “@ipatrol” to link it automatically. I guess it's too late now, but will do next time :)
ipatrol AlexDaniel: I know you can amend commits in git
AlexDaniel last commit yeah, two commits deep requires some kind of rebase magic 00:47
I have a better solution, hold on
raschipi Not when they are merged upstream
In local only commits, that's possible.
AlexDaniel raschipi: you can still force-push it, not that big of a deal for small repos like whateverable 00:48
timotimo git rebase -i origin/master will let you change a "pick" to "reword" and then it'll let you rewrite the commit message and you'll still end up with all commits you had in the same order
if you have already pushed it, you can use a different commit from origin/master, like HEAD~4 or so
raschipi Right, it's only a problem is a fork pulls it.
grondilu say I have two types Foo and Bar and I defined multi infix:<leg>(Foo $, Bar $). I shouldn't have to define multi infix:<leg>(Bar $, Foo $), shoud I? I mean, can't I use the antisymmetricity or something?
raschipi if a fork*
MasterDuke `MVM_COVERAGE_LOG=<something> MVM_COVERAGE_CONTROL=1 perl6 -e 'use nqp; my %h = :1a, :1c; my %g = :2a, :3g; nqp::coveragecontrol(1); my %i = %h, %g; nqp::coveragecontrol(0); say %i'`
something like that ^^^
timotimo grondilu: it won't do that for you, i don't think 00:49
grondilu well, that's LTA
grondilu can't someone write a "is antisymmetric" trait or something? 00:49
no seriously it's LTA. If there is a candidate for foo leg bar, but none for bar leg foo, it should fall back on the former to define the latter. 00:52
ipatrol m: %h = :a(1), :b(2), :c(4); %h = %h , %h.invert; say %h;
camelia 5===SORRY!5=== Error while compiling <tmp>
Variable '%h' is not declared
at <tmp>:1
------> 3<BOL>7⏏5%h = :a(1), :b(2), :c(4); %h = %h , %h.i
grondilu because duplicating the declarations feels very dumb.
ipatrol m: my %h = :a(1), :b(2), :c(4); %h = %h , %h.invert; say %h;
camelia Odd number of elements found where hash initializer expected:
Found 7 (implicit) elements:
Last element seen: $((1 => "a", 4 => "c", 2 => "b").Seq)
in block <unit> at <tmp> line 1
timotimo probably have to |%h.invert that
timotimo goes to bed
ipatrol m: my %h = :a(1), :b(2), :c(4); %h = %h , |%h.invert; say %h;
camelia {1 => a, 2 => b, 4 => c, a => 1, b => 2, c => 4}
ipatrol m: my %h = :a(1), :b(2), :c(4); say %h, %h.invert; 00:53
camelia {a => 1, b => 2, c => 4}(1 => a 4 => c 2 => b)
ipatrol m: my %h = :a(1), :b(2), :c(4); %h = %h , %h.invert.Hash; say %h; 00:54
camelia {1 => a, 2 => b, 4 => c, a => 1, b => 2, c => 4}
raschipi m: my %h = :a(1), :b(2), :c(4), :d('d'); %h = %h , |%h.invert; say %h;
camelia {1 => a, 2 => b, 4 => c, a => 1, b => 2, c => 4, d => d}
raschipi Now which is mine and which is yours?
raschipi The second one is mine because of the d 00:55
ipatrol actually, it should use antipairs to avoid array expansion
AlexDaniel ipatrol: here github.com/perl6/whateverable/wiki...-detection
ipatrol m: my %h = :a(1), :b(2), :c(4); %h = %h , %(%h.antipairs); say %h; 00:56
camelia {1 => a, 2 => b, 4 => c, a => 1, b => 2, c => 4}
ipatrol AlexDaniel: thank you
And next time, please ask me before including my quips into some random project.
AlexDaniel ipatrol: you are right
ipatrol: I didn't quite think it through, sorry :) 00:57
ipatrol $ipatrol.ACCEPTS($AlexDaniel::apology) 00:59
;-)
raschipi ipatrol: That's better written as '$AlexDaniel::apology ~~ $ipatrol' 01:00
ipatrol ordinarily, but sometimes, explicit is better than implicit :-P 01:01
raschipi I think I know what you guys wanted above, a way for the debbuger to print which functions are being called?
ipatrol raschipi: some kind of desugaring apparatus
raschipi so, to know $AlexDaniel::apology ~~ $ipatrol calls $ipatrol.ACCEPTS($AlexDaniel::apology), you'd want thew debugger to go into it... 01:02
ipatrol something like that 01:03
raschipi There's also a bot around that can tell you things like that. 01:08
AlexDaniel m: say 42 01:09
camelia 42
ipatrol why does using packages cause these two statements to compile differently? 01:12
m: my @Characters::Hiragana = ("\x3040".."\x3050").list; my @Characters::Katakana = ("\x30A0".."\x30AA").list; say %({ my %h = @Characters::Hiragana Z=> @Characters::Katakana; %(%h , |%h.antipairs)}());
camelia {぀ ぁ あ ぃ い ぅ う ぇ え ぉ お か が き ぎ く ぐ => (゠ ァ ア ィ イ ゥ ウ ェ エ ォ オ), ゠ ァ ア ィ イ ゥ ウ ェ エ ォ オ => ぀ ぁ あ ぃ い ぅ う ぇ え ぉ お か が き ぎ く ぐ}
ipatrol m: my @Hiragana = ("\x3040".."\x3050").list; my @Katakana = ("\x30A0".."\x30AA").list; say %({ my %h = @Hiragana Z=> @Katakana; %h , |%h.antipairs}()); 01:14
camelia {぀ => ゠, ぁ => ァ, あ => ア, ぃ => ィ, い => イ, ぅ => ゥ, う => ウ, ぇ => ェ, え => エ, ぉ => ォ, お => オ, ゠ => ぀, ァ => ぁ, ア => あ, ィ => ぃ, イ => い, ゥ => ぅ, ウ => う, ェ => ぇ, エ => え, ォ => ぉ, …
ipatrol m: my @Characters::Hiragana = ("\x3040".."\x3050").list; my @Characters::Katakana = ("\x30A0".."\x30AA").list; dd %({ my %h = @Characters::Hiragana Z=> @Characters::Katakana; %(%h , |%h.antipairs)}()); 01:15
camelia Hash % = {"぀ ぁ あ ぃ い ぅ う ぇ え ぉ お か が き ぎ く ぐ" => $("゠", "ァ", "ア", "ィ", "イ", "ゥ", "ウ", "ェ", "エ", "ォ", "オ"), "゠ ァ ア ィ イ ゥ ウ ェ エ ォ オ" => "぀ ぁ あ ぃ い ぅ う ぇ え ぉ …
ipatrol m: my @Characters::Hiragana = ("\x3040".."\x3050").list; my @Characters::Katakana = ("\x30A0".."\x30AA").list; dd { my %h = @Characters::Hiragana Z=> @Characters::Katakana; %(%h , |%h.antipairs)}(); 01:16
camelia Hash % = {"぀ ぁ あ ぃ い ぅ う ぇ え ぉ お か が き ぎ く ぐ" => $("゠", "ァ", "ア", "ィ", "イ", "ゥ", "ウ", "ェ", "エ", "ォ", "オ"), "゠ ァ ア ィ イ ゥ ウ ェ エ ォ オ" => "぀ ぁ あ ぃ い ぅ う ぇ え ぉ …
ipatrol m: my @Characters::Hiragana = ("\x3040".."\x3050").list; my @Characters::Katakana = ("\x30A0".."\x30AA").list; dd { @Characters::Hiragana }(); 01:17
camelia List $v = $("぀", "ぁ", "あ", "ぃ", "い", "ぅ", "う", "ぇ", "え", "ぉ", "お", "か", "が", "き", "ぎ", "く", "ぐ")
ipatrol m: my @Hiragana = ("\x3040".."\x3050").list; my @Characters::Katakana = ("\x30A0".."\x30AA").list; dd { @Hiragana }();
camelia Array @Hiragana = ["぀", "ぁ", "あ", "ぃ", "い", "ぅ", "う", "ぇ", "え", "ぉ", "お", "か", "が", "き", "ぎ", "く", "ぐ"]
ipatrol list versus array
but why? 01:18
ipatrol m: my @Characters::Hiragana = ("\x3040".."\x3050").Array; my @Characters::Katakana = ("\x30A0".."\x30AA").Array; dd { @Characters::Hiragana }(); 01:20
camelia Array $v = $["぀", "ぁ", "あ", "ぃ", "い", "ぅ", "う", "ぇ", "え", "ぉ", "お", "か", "が", "き", "ぎ", "く", "ぐ"]
ipatrol m: my @Characters::Hiragana = ("\x3040".."\x3050").Array; my @Characters::Katakana = ("\x30A0".."\x30AA").Array; dd %({ my %h = @Characters::Hiragana Z=> @Characters::Katakana; %(%h , |%h.antipairs)}()); 01:21
camelia Hash % = {"぀ ぁ あ ぃ い ぅ う ぇ え ぉ お か が き ぎ く ぐ" => $["゠", "ァ", "ア", "ィ", "イ", "ゥ", "ウ", "ェ", "エ", "ォ", "オ"], "゠ ァ ア ィ イ ゥ ウ ェ エ ォ オ" => "぀ ぁ あ ぃ い ぅ う ぇ え ぉ …
ipatrol no, still not right 01:21
m: my @Characters::Hiragana = ("\x3040".."\x3050").Array; my @Characters::Katakana = ("\x30A0".."\x30AA").Array; dd %({ my %h = (@Characters::Hiragana Z=> @Characters::Katakana).Array; %(%h , |%h.antipairs)}()); 01:22
camelia Hash % = {"぀ ぁ あ ぃ い ぅ う ぇ え ぉ お か が き ぎ く ぐ" => $["゠", "ァ", "ア", "ィ", "イ", "ゥ", "ウ", "ェ", "エ", "ォ", "オ"], "゠ ァ ア ィ イ ゥ ウ ェ エ ォ オ" => "぀ ぁ あ ぃ い ぅ う ぇ え ぉ …
AlexDaniel m: my @A::B = (0..5); my @C = (0..5); dd @A::B; dd @C 01:23
camelia Range $v = 0..5
Array @C = [0, 1, 2, 3, 4, 5]
AlexDaniel what a wonderful question :)
MasterDuke ?! 01:24
ipatrol AlexDaniel: that's never a good thing to hear in a programming language chat room
AlexDaniel MasterDuke: why is it different?
MasterDuke tiny elves
ipatrol ha 01:25
the module form stores it as an object, but the regular form stores it as an unrolled array
AlexDaniel fwiw that's not some new behavior, we had it like this at least since 2014.10 01:26
ipatrol AlexDaniel: how can you tell? 01:27
AlexDaniel committable6: all my @A::B = (0..5); my @C = (0..5); dd @A::B; dd @C
ipatrol ?
committable6 AlexDaniel, gist.github.com/a1d7f902c1e25317c7...3e0cc7e10d
AlexDaniel ipatrol: ^
ipatrol ok 01:29
ipatrol i0.kym-cdn.com/entries/icons/origin...NlQWRM.jpg 01:29
AlexDaniel timotimo: maybe you know? 01:30
ipatrol AlexDaniel: lacking a convincing explanation, I'd go ahead and say that the behavior is wrong, since is appears to violate the specifications for both hashes and packages. 01:42
As well as for ranges
AlexDaniel ipatrol: feel free to create a ticket. At this time of the day most people are asleep, and I am not knowledgable enough to give a proper answer :( 01:43
huggable: rakudobug
huggable AlexDaniel, Report bugs by emailing to [email@hidden.address] See also: github.com/rakudo/rakudo/wiki/rt-introduction
ipatrol m: my @C = 0..5; dd @C; 01:46
camelia Array @C = [0, 1, 2, 3, 4, 5]
raschipi ipatrol: You can get around it by using binding instead of asignement
ipatrol m: my @C = 0..65535**65535; dd @C; 01:47
camelia (timeout)
ipatrol See? That violates the lazy behavior that ranges are supposed to have
m: my @C := 0..65535**65535; say @C.gist; 01:48
camelia (timeout)
AlexDaniel it's getting stuck on 65535**65535 I think 01:49
ipatrol yeah, just realized that, trying again
m: my @C := 0..2**65535; say @C.gist;
camelia 0..10017649652034232324895361757801278752239127377848757096325084868554470297781557265447530654404666740505191171714536315909114746910594063344347531823807735145825209359581757939831736097214654639910421545524279952850796594798197624316861836015014584847…
ipatrol m: my @C = 0..2**65535; say @C.gist;
camelia (timeout) 01:49
raschipi ipatrol: You really like redudancy... 01:56
ipatrol raschipi: no, what makes you say that?
raschipi say calls .gist 01:57
ipatrol raschipi: being explicit in order to rule out any other edge cases 01:58
raschipi Well, that looks like the opposite to me, because it will call .gist twice... 01:59
It will call .gist on the result of .gist
ipatrol raschipi: I don't know what the bot does though 02:00
raschipi Why would you suppose it's different? 02:00
ipatrol raschipi: I don't know if it rebinds it to send the output to the channel instead of stdout 02:01
raschipi redirection? why would it matter...
ipatrol Don't know if it does other formatting things instead of gist 02:04
raschipi Well, call 'put $var.gist' so it do what you're asking for. 02:05
ipatrol or I can check it in my console, which I know is stock 02:06
ipatrol AlexDaniel: another thing: the Z metaop apparently doesn't treat iterables properly that it gets through package references, instead wrapping them like scalar values 02:12
m: my @A::B = (1..8); my @A::C = ('A'..'H'); say @A::B Z @A::C; say @(@A::B) Z @(@A::C); 02:15
camelia ((1..8 "A".."H"))
((1 A) (2 B) (3 C) (4 D) (5 E) (6 F) (7 G) (8 H))
ipatrol bbl 02:18
mst lizmat:
bah, paste error, ignore me
ipatrol m: my @A::B = [1,2,3,4]; my @A::C = [5,6,7,8]; say @A::B Z @A::C; say @(@A::B) Z @(@A::C); 02:26
camelia (([1 2 3 4] [5 6 7 8]))
((1 5) (2 6) (3 7) (4 8))
ipatrol m: my @A::B = (1,2,3,4); my @A::C = (5,6,7,8); say @A::B Z @A::C; say @(@A::B) Z @(@A::C);
camelia (((1 2 3 4) (5 6 7 8)))
((1 5) (2 6) (3 7) (4 8))
wander4096 doc writes 04:32
multi sub perl(Mu --> Str)
but
m: perl 42
camelia 5===SORRY!5=== Error while compiling <tmp>
Undeclared routine:
perl used at line 1
wander4096 m: perl("String")
camelia 5===SORRY!5=== Error while compiling <tmp>
Undeclared routine:
perl used at line 1
wander4096 so what does this line in doc mean?
also it says that `multi method Str(--> Str)` 04:34
and `method self(--> Mu)`
m: Str(42:)
camelia 5===SORRY!5=== Error while compiling <tmp>
Unable to parse expression in argument list; couldn't find final ')'
at <tmp>:1
------> 3Str(42:7⏏5)
expecting any of:
colon pair
wander4096 m: self(42:)
camelia ( no output )
wander4096 m: say self(42:)
camelia 42
wander4096 what happens? 04:35
grondilu m: proto f($? --> Int) {*}; multi f() { rand }; f() 05:08
camelia ( no output )
grondilu what's the point of having a return type in the proto signature if it has no impact on the multis?? 05:09
I mean come on 05:10
Geth doc: 2e8bfea37f | (Zoffix Znet)++ (committed using GitHub Web editor) | doc/Type/Mu.pod6
We don't have sub form of `perl`
05:14
geekosaur m: proto f($? --> Int) {*}; multi f() { rand }; say f() 05:47
camelia 0.966105556137982
u-ou what does proto do? 05:48
geekosaur sets up for what C++/Java call overloading (multiple definitions distinguished and dispatched based on different signatures) 05:52
without that you get a multiple definition error
u-ou ah 05:58
geekosaur actually that is multi, not sure how proto fits in with that (actually the combination seems slightly odd tbh)
u-ou but you can't have one without the other? 05:59
geekosaur that is what is confusing me. proto is something I think fo as being in the declaration for each impl because that;s how they're dispatched
geekosaur so a single common proto seems contradictory to me as it implies no way to dispatch on proto 05:59
geekosaur is poking at docs... 06:00
well, the doc I just read implies what I said was right... 06:01
ah, it allows abstracting out a common core
including common code, apparently, by providing a body with {*} where dispatch to the specific candidate should happen 06:02
geekosaur so, given that, brings me to what I was thinking of about it: it was degtermined that letting the return type specification be obeyed at all implies return type polymorphism (a la Haskell typeclasses), which has been rejected 06:04
but in that case it should probably at least warn
also the docs say nothing whatsoever about the return type, but: "It acts as a wrapper that can validate but not modify arguments." 06:05
implying it doesn't act as a normal declarator at all
so, might be worth a LTA bug (although I am not sure if it should error or warn) 06:07
LanceW Hi all, I have been experimenting with Perl6 on a Windows 10 laptop (using berrybrew for perl5 and then rakudobrew for perl6). So far all good... at least until I tried to use zef to install Bailador, DBIish etc. I get and error about "No such method 'subst' for invocant of type 'Any'" anyone got some ideas. Googling turned up rt.perl.org/Public/Bug/Display.html?id=131815 but even after reinstall same issue. I have a gist of full 08:13
error: gist.github.com/lancew/f1d5d4af517...c81c992601 ANy assistance appreciated.
gfldex LanceW: we dont got recent binaries for windows. So you would have to build rakudo by hand. 08:37
LanceW gfldex, building with rakudobrew is not sufficient? 08:40
HoboWithAShotgun good localtime you wonderful people 08:47
HoboWithAShotgun what a lovely day this is 08:50
HoboWithAShotgun nothing beats sitting on your desk with a huge weekend joint and a cold german beer, after a wakeup bj and a rich breakfast 08:51
gfldex LanceW: we are at This is Rakudo version 2017.08-155-gc3a71acb3 built on MoarVM version 2017.08.1-171-gcf95892e6 08:56
implementing Perl 6.c.
stmuk LanceW: I can try in an hour or so 09:00
LanceW thanks stmuk 09:07
piojo perlpilot: are you around? 09:48
Geth doc: W4anD0eR96++ created pull request #1562:
It seems we have sub form of `Str`
09:58
piojo On the topic of doc changes, I really think "regexes" should also be indexed as "Regular Expressions". Can I PR this change, or is there a reason it's not searchable that way? 10:00
I'd like to change that, if nobody has serious objections
moritz please go ahead 10:14
piojo thanks moritz. Will do after `make html` finishes 10:22
Geth doc: lefth++ created pull request #1563:
Make the "Regexes" page also searchable as "Regular Expressions".
11:02
stmuk LanceW: I had the same error as you but following the fix at the bottom of rt.perl.org/Public/Bug/Display.html?id=131815 fixed it 11:11
its basically the windows version of rm -rf ~/.zef and ~/.perl6
LanceW stmuk, I tried that and had no success 11:20
stmuk, I shall do again
Tried that again.. same issue with No such method 'subst' for invocant of type 'Any' 11:23
nine Pretty off topic, but just hilarious and with good lessons: www.pentestpartners.com/security-b...es-really/ 11:27
timotimo IoT: Not Even Once 11:39
stmuk LanceW: you could also try "zef nuke" with various options and also checking the directories are being removed with "dir" 12:01
LanceW Shall do. :-)
hmmm.... "zef nuke site" zapped everything including zef. So I then ran rakudobrew build zef, followed by zef install Bailador. Same error ( No such method 'subst' for invocant of type 'Any' ) in in method ver at C:\Users\akage\rakudobrew\moar-2017.07\install\share\perl6\site\sources\138DF35FA08A8D5EDA4A76A105D44F4FFBEDB983 (Zef::Distribution) line 127 12:06
timotimo hm, is there some distribution that doesn't have a version field set? 12:08
Skarsnik most of my module have * as version x) 12:09
LanceW I don't seem to be able to install any modules. All with same error. 12:10
gist.github.com/lancew/169b27599a0...35f02055f2 <- Here is me trying to install JSON::Fast 12:12
timotimo i'm trying to install Bailador, too. so many dependencies %) 12:18
anything when you "zef update"? 12:19
piojo LanceW: you're not using cygwin, are you? 12:20
LanceW Not installed it. BUT... I have been using chocolatey to install various things so could be installed as a dependency perhaps? 12:22
timotimo you'd probably notice if you were using cygwin 12:23
LanceW using CMDer, but typing cyg TAB TAB does seem to come up with a couple of cyg tools.cygcheck.exe cygpath.exe cygwin-console.helper.exe 12:23
pmurias timotimo: aren't technically the "sane" devices like laptops and smartphones parts of the IoT? 12:57
timotimo not in the way the IoT buzzword is used 12:58
LanceW Hmmm so deleted rakudobrew, installed via the MSI. Same error. Some presume the cygwin issue needs resolving. /me goes off to work out what installed cygwin 13:00
piojo LanceW: does it work in cmd.exe? 13:05
If not, then I think the fact that cygwin is installed isn't part of the problem. Unrelated. 13:06
wander4096 m: my $c = class Foo { has $.foo = 42; }.new.Capture; say $c{"foo"}; say $c.does(Associative); 13:07
camelia 42
False
wander4096 `class Capture does Positional does Associative { }` 13:08
wander4096 m: my $c = class Foo { has $.foo = 42; }.new.Capture; say $c[0]; say $c.does(Positional); 13:08
camelia Nil
False
Geth doc: titsuki++ created pull request #1564:
Quoting adverbs
piojo m: say class { has $.foo }.new 13:09
camelia <anon|56789568>.new(foo => Any)
piojo woo hoo, anonymous classes
didn't know we had those.
wander4096 m: say Capture.does(Associative) 13:11
camelia False
wander4096 m: say Capture.does(Positional)
camelia False
LanceW no it does not work in cmd.exe either 13:13
piojo thanks for testing--that closes one can of worms. 13:14
LanceW Here is output in cmd.exe: gist.github.com/lancew/9ce4ec6cc20...f575d4770c 13:15
piojo could someone try running this: 13:20
touch module.pm6; perl6 -I. -Mmodule -e ''
It gave me a funny warning message 13:21
timotimo ti works here
piojo timotimo: huh. thanks.
ghost in the machine. It's not happening anymore. (must have been a warning only during compilation to bytecode) 13:22
timotimo in that case delete the .precomp folder and try again 13:23
piojo timotimo: thanks for that tip, I've wanted to know that before. But really can't reproduce. oh, well 13:29
Geth doc/master: 4 commits pushed by titsuki++, (Itsuki Toyota)++ 13:36
titsuki .tell piojo2 Thanks for your kindly reminder. I closed github.com/perl6/doc/issues/1102 13:40
yoleaux titsuki: I'll pass your message to piojo2.
piojo titsuki: I think that note was the grand total of my contribution to the doc hackathon :P 13:43
fortunately, I started making other small changes where possible 13:44
like the Android sale that marked a bunch of apps at US$0.10 -- basically no profit, but it helped start a habit
timotimo squashable6: info
squashable6 timotimo, I cannot recognize this command. See wiki for some examples: github.com/perl6/whateverable/wiki/Squashable
timotimo squashable6: status 13:45
squashable6 timotimo, Next SQUASHathon in 18 days and ≈20 hours (2017-10-07 UTC-12⌁UTC+14)
piojo is there a topic yet?
timotimo rakudo tickets, seems like 13:46
moritz I have no idea, but I'd hope "testneeded" tickets
titsuki piojo: oh, that's good to hear :) 13:49
piojo Has anybody seen this error when loading a module for the first time?: 13:51
Use of uninitialized value $repo-id of type Any in string context.
Methods .^name, .perl, .gist, or .say can be used to stringify it to something meaningful.
I can't reproduce, but I've seen it twice in the past half hour
timotimo do you have a backtrace to go with it? 13:52
piojo *warning, not error
timotimo: no, it just prints twice, then continues with the correct program output
timotimo OK
LanceW Hmm... removed Gow (which removed cygwin exes) same issue. :-( 14:14
piojo I noticed we have 3 pages about OOP, which come at the problem from different angles. Typesystem, Object Orientation, and 'Classes and Objects' 14:15
Can we add a "See Also" section to the bottom of these pages so they can reference each other?
One might think perfect organization would negate the need for "see also", but if you type "object orient...", you'll find yourself on one page, and typing "OOP" will land you on another. 14:17
This seems like a minor stylistic change, but I think it would be useful 14:18
huf the mysterious object orient... the famous explorer marco sweepo travelled there 14:33
grondilu m: say Set().Mix{Set()} 14:34
camelia 1
piojo huf: haha
grondilu m: say Set.new..Mix{Set.new}
camelia 5===SORRY!5=== Error while compiling <tmp>
Autovivifying object closures not yet implemented. Sorry.
at <tmp>:1
------> 3say Set.new..Mix{Set.new}7⏏5<EOL>
grondilu m: say Set.new.Mix{Set.new} 14:35
camelia 0
grondilu m: say Set.new.Mix{Set.new} == Set().Mix{Set()}
camelia False
grondilu ^weird
timotimo huf: aah the pun! :)
grondilu m: Set() == Set.new
camelia WARNINGS for <tmp>:
Useless use of "==" in expression "Set() == Set.new" in sink context (line 1)
Use of uninitialized value of type Set(Any) in numeric context
in block <unit> at <tmp> line 1
grondilu m: say Set() == Set.new
camelia Use of uninitialized value of type Set(Any) in numeric context
True
in block <unit> at <tmp> line 1
grondilu m: say Set() === Set.new 14:36
camelia False
timotimo well, == gives you numeric equivalence?
and Set.new is empty and Set() is also empty
huf and anyway, i think object orientalism is frowned upon these days :) 14:37
lizmat m: dd Set() 14:43
camelia Set(Any)
lizmat Set() is a coercion type, not a Set
m: dd Set().^name
camelia "Set(Any)"
lizmat m: dd Set().HOW.name
camelia Too few positionals passed; expected 2 arguments but got 1
in block <unit> at <tmp> line 1
lizmat m: dd Set().HOW
camelia No such method 'dispatch:<.?>' for invocant of type 'Perl6::Metamodel::CoercionHOW'
in block <unit> at <tmp> line 1
lizmat m: dd Set().HOW.name 14:44
camelia Too few positionals passed; expected 2 arguments but got 1
in block <unit> at <tmp> line 1
lizmat m: dd Set().HOW.name(Set())
camelia "Set(Any)"
lizmat hmmm
m: dd set().HOW.name
camelia Too few positionals passed; expected 2 arguments but got 1
in block <unit> at <tmp> line 1
lizmat m: dd set().^name
camelia "Set"
lizmat m: dd set().HOW
camelia Perl6::Metamodel::ClassHOW.new
lizmat m: use nqp; dd nqp::istype(Set(),Set) # perhaps more clearly: Set() is *not* a Set 14:46
camelia 0
jnthn Indeed, it's the coercion type from Any -> Set 14:49
grondilu m: say Set() ~~ Set
camelia No such method 'does' for invocant of type 'Perl6::Metamodel::CoercionHOW'
in block <unit> at <tmp> line 1
grondilu that's weird. I have a Mix of Set and I wanted to retrieve the mix value of the empty set. 'Set()' worked, 'Set.new' didn't. 14:51
grondilu But if Set() is not a Set, I would have expected Set.new to work instead of Set() 14:51
grondilu realizes there is also the option of "set()" 14:52
'set()' actually workds
m: say set().Mix{set()} 14:53
camelia 0
grondilu hum :/
I though it worked
Zoffix set() is empty set
not a set with an empty set
Zoffix Oh, and yeah, it coerceres its contents to Mix, not itself 14:54
m: say set(∅).Mix{∅}
camelia 1
Zoffix grondilu: as for return type in protos you mentioned yesterday. I suspect it's just NYI. 14:55
grondilu m: say (set().Mix){set()}
camelia 0
grondilu Zoffix: noted
grondilu doesn't understand why his code work while the above line doesn't 14:56
grondilu tries to golf it
Zoffix (set().Mix){set()} => (mix()){set()} => "find an an object (empty Set) in an empty Mix" => 0 14:57
grondilu: ensure your rakudo version is recent-enough. There were some nail-downings of Set/Mix/Bag stuff a couple of months ago. 14:58
grondilu well my rakudo is rarely more than a few days old
though today !?Configure returns nothing, so I guess I haven't compiled rakudo for a while 15:00
grondilu Zoffix: shouldn't set().Mix return a Mix with a single empty set in it? 15:03
m: say set().Mix 15:04
camelia Mix()
grondilu oh wait
m: say (set(),).Mix
camelia Mix(set())
grondilu I see, makes sense
grondilu m: say set(set()).Mix 15:04
camelia Mix(set())
Zoffix That happens only for type objects. Set:D coerces its contents, not itself. 15:06
m: dd Set.Mix
camelia (Set).Mix
grondilu if you're curious about what I'm doing with those Mix of sets, check out my Polynomial class in the symbolic branch of my Clifford module: github.com/grondilu/clifford/blob/...nomial.pm6 15:15
I'm implementing monomials as bags, and polynomials as Mix of monomials 15:16
I found the idea quite elegant.
and now I'm trying to do the same for MultiVectors as Mix of Sets of basisvectors 15:17
now that I think about it, I should consider the constant as the empty bag 15:18
grondilu my ultimate goal is to do algebra with things like 1 + x²*y + y²*e0 - x*e1∧e2 15:20
Zoffix neat 15:21
grondilu I'm hoping that if Polynomials implements Real, I will be able to consistently use them as value in Mix 15:25
grondilu m: class MInt does Real { has Int $.n; method Bridge { $n % 13 } }; say ('foo' xx 12). 15:29
camelia 5===SORRY!5=== Error while compiling <tmp>
Variable '$n' is not declared. Did you mean '$!n'?
at <tmp>:1
------> 3oes Real { has Int $.n; method Bridge { 7⏏5$n % 13 } }; say ('foo' xx 12).
grondilu oops sorry
m: class MInt does Real { has Int $.n; method Bridge { $n % 3 } }; say ('foo' => MInt.new(:n(2))).Mix 15:30
camelia 5===SORRY!5=== Error while compiling <tmp>
Variable '$n' is not declared. Did you mean '$!n'?
at <tmp>:1
------> 3oes Real { has Int $.n; method Bridge { 7⏏5$n % 3 } }; say ('foo' => MInt.new(:n(2)
grondilu m: class MInt does Real { has Int $.n; method Bridge { $!n % 3 } }; say ('foo' => MInt.new(:n(2))).Mix
camelia Mix(foo(2))
grondilu m: class MInt does Real { has Int $.n; method Bridge { $!n % 3 } }; constant two = MInt.new(:n(2)); say ("foo" => two, "foo" => two).Mix 15:31
camelia Mix(foo(4))
grondilu hum, not what I was hoping
grondilu was hoping Mix(foo(1)) 15:32
m: class MInt does Real { has Int $.n; method Bridge { $!n % 3 } }; constant two = MInt.new(:n(2)); say ("foo" => two, "foo" => two).Mix<foo>.WHAT 15:33
camelia (Int)
grondilu m: class MInt does Real { has Int $.n; method Bridge { $!n % 3 } }; constant two = MInt.new(:n(2)); say ("foo" => two).Mix<foo>.WHAT
camelia (MInt)
Zoffix m: class MInt does Real { has Int $.n; method Bridge { $!n % 3 } }; constant two = MInt.new(:n(2)); say (2 + two).^name 15:34
camelia Num
Zoffix Same problem basically.
Methods/ops don't carry over the types
Zoffix m: class MInt is Int { has Int $.n; method Bridge { $!n % 3 } }; constant two = MInt.new(:n(2)); say (2 + two).^name # better example 15:35
camelia Int
grondilu except I did not introduce a Int
grondilu I only added two and two (or thought I did) 15:35
I don't see why a Int should show up 15:36
grondilu oh wait 15:36
hang on
Zoffix The mix added the weights together
grondilu m: class MInt does Real { has Int $.n; method Bridge { self.new: n => ($!n % 3) } }; constant two = MInt.new(:n(2)); say ("foo" => two, "foo" => two).Mix 15:37
lol
camelia (timeout)
Zoffix That's the dispatch infiniloop I mentioned the other day
grondilu m: role MInt does Real { has Int $.n; method Bridge { ($!n % 3) but MInt } }; constant two = MInt.new(:n(2)); say ("foo" => two, "foo" => two).Mix 15:37
camelia Invocant of method 'Bridge' must be an object instance of type 'Int', not a type object of type 'Int'. Did you forget a '.new'?
in method Bridge at <tmp> line 1
in block <unit> at <tmp> line 1
Zoffix You keep giving it a thing it doesn't know how to handle and it loops calling .Bridge
grondilu I guess I could make it work if instead of just providing a Bridge I implement enough arithmetics operators 15:38
and make sure they return a MInt 15:39
Zoffix That might not make ().Mix work. Not only your custom ops will not be in its lexical scope, I don't think it uses them at all. 15:39
grondilu Mix is supposed to accept Real as values. It should be agnostic about what actual class is implementing it 15:40
Zoffix Maybe in a perfect world.
Currently, that'd make them like 100+ times slower, To satisfy an edge case 15:41
grondilu :/
Zoffix All part of this ticket, I'd guess: rt.perl.org/Ticket/Display.html?id...et-history 15:42
grondilu worst case scenario I'll write my own Mix :/ 15:43
it'd be LTA, though
lizmat grondilu: perhaps an approach such as with Date.new would help 15:47
grondilu doesn't know about tha 15:53
t
lizmat afk& 15:58
HoboWithAShotgun what do i have to add to my class so I can do the equality check? 16:06
Zoffix HoboWithAShotgun: what sort of equality? 16:07
(numeric, stringy, object)
HoboWithAShotgun for my angle class. when i say $alpha = 45°; $beta = 45°; say $alpha == $beta; i get a cannot resolve caller ... 16:09
oh. also override ==
*facepalm
Zoffix m: sub postfix:<°> { class Deg { has $.d; method Numeric { $!d } }.new: :$^d }; my $alpha = 45°; my $beta = 45°; say $alpha == $beta 16:11
camelia True
Zoffix m: sub postfix:<°> { class Deg { has $.d; method Numeric { $!d } }.new: :$^d }; my $alpha = 45°; my $beta = 35°; say $alpha == $beta
camelia False
Zoffix You could also add a multi for `==`, but keep in mind it'd have to be available in lexical scope for it to work (so if you pass your custom class objects somewhere else, and do comparison there, it won't work right) 16:12
HoboWithAShotgun this is the error i get with my actual class 16:15
Cannot resolve caller Numeric(Math::Angle: ); none of these signatures match: (Mu:U \v: *%_)
Zoffix HoboWithAShotgun: right, add method Numeric {} to Math::Angle that returns some core numeric 16:15
HoboWithAShotgun yup, that did it 16:17
take my dearest gratidude good sir
Zoffix takes it 16:19
HoboWithAShotgun allright. next textcase fails ok 45° > 30°. cannot resolve caller Real 16:24
i mean i got it fixed but why does it need a Real to a larger than? 16:25
Zoffix HoboWithAShotgun: because that operator works with numbers and only Real numbers can be compared 16:31
Zoffix m: sub postfix:<°> { class Deg { has $.d; method Real { $!d }; method Numeric { $!d } }.new: :$^d }; my $alpha = 45°; my $beta = 45°; say $alpha == $beta; say $alpha > $beta 16:32
camelia True
False
Zoffix m: say 42i > 70i
camelia Cannot convert 0+42i to Real: imaginary part not zero
in block <unit> at <tmp> line 1
Zoffix New blog post: "The Rakudo Book Project": rakudo.party/post/The-Rakudo-Book-Project
moritz Zoffix++ 16:36
Zoffix: I'll be happy to proof-read for you :-)
Zoffix :)
moritz Zoffix: I don't know if you are open to such ideas, but one thing you could do is self-publish, and come up with a rule like selling the books for the first one or two years, and then making them freely available 17:01
moritz I made about $870 off the first book before going to Apress, and about $400 selling the second one 17:04
and both didn't even have a proper launch at that time (so they were never advertised as "finished" and on sale at the same time)
moritz so I think with a proper launch, it's not unreasonable to expect to make betwee 2k und 3k USD per book (at least the beginner books; I expect the more advanced ones to sell less) 17:06
moritz maybe more with good marketing 17:16
Zoffix Nah. The primary goal is to have good information for Rakudo users, hence the freeness. Rakudo Core Fundraisers are just a cherry on top. 17:38
mspo hey is there an 09 release? 17:41
timotimo mspo: almost!
mspo timotimo: new/stable CURI stuff in there? 17:42
timotimo: also how long is almost? :) 17:43
timotimo could still happen today 17:46
i'm not sure about the CURI situation in general, it's not something i've worked on at all 17:48
mspo that would be nice 17:49
Skarsnik releasable6, status 17:58
releasable6 Skarsnik, Next release will happen when it's ready. 1 blocker. 154 out of 167 commits logged
Skarsnik, Details: gist.github.com/b563d635b0e1774034...f9123334a2
tyil is there some matrix showing all elements of unicode and a bunch of popular languages, where you can easily look up which langs support which parts of the unicode spec? 19:00
(and if there isn't, would it be an idea to make one to showcase perl 6's support for it?) 19:01
leont I remember Tom Christiansen doing a presentation on this a few years ago (comparing perl5 to other languages), focussing on regexes in articular. Haven't seen such a thing in perl6 context. 19:02
tyil maybe someone with a lot of unicode experience ( samcv ?) could distill the spec into implementable parts and make a list of it, but we'd need some good info on what other langs support as well 19:06
leont www.azabani.com/pages/gbu/ 19:10
tyil interesting 19:12
thanks leont
(wonder if its still up to date)
leont I should warn you though if you plan on emailing TomC about this, he has a tendency to write 10000 word emails :-p 19:13
tyil I have the bandwidth :p 19:14
leont "For example, this talk originally included a bunch of pain about Unicode in Python v2.7, but I deleted all the v2.7 material to get past the profanity filters." :-D 19:15
tyil lol 19:17
timotimo :D 19:19
well, python 2.7 isn't in use any more, so ... :P
tyil timotimo: we wish 19:20
py2.7 still seems to be more popular than the 3 series from what i've seen at meetups
leont Yeah, that's also my impression 19:31
timotimo not a problem 19:36
pmurias Zoffix: what makes writing books more fun the writing reference docs for docs.perl6.org? 20:02
lizmat Zoffix: re rakudo.party/post/The-Rakudo-Book-Project , I would argue that the Green Book already exists: it's called "Think Perl 6" 20:32
lizmat oh, and by the way, Zoffix++ # excellent ide and blog post 20:34
*idea rather :-)
MasterDuke
.oO(Zoffix is writing a Perl 6 IDE, woot!)
20:38
can only dream, but the books are a great endeavor also 20:39
Zoffix pmurias: not having 100 others users bikeshedding your every decision. 20:39
[Coke] Zoffix++ 20:41
skids m: say so rx/foo/; # Root reason behind test failure of RT#124527 spectest 20:49
synopsebot6 Link: rt.perl.org/rt3/Public/Bug/Display...?id=124527
camelia False
skids But I cannot edit that ticket. 20:50
Aaronepower Is there any shorter way of saying `if $<match>.Bool { $result = 1 }`? 20:54
[Coke] ?$<match>
? 20:55
Aaronepower [Coke]: Where do I put `$result = 1`?
[Coke] $result = 1 if ?$<match>;
skids if you don't care if result gets set to 0, $result = +?$<match> 20:56
Aaronepower [Coke]: That works for me. thanks!
skids: I'm doing something more complex than setting something to zero or one. So I couldn't golf it that far. What does the + do in that context? 20:58
skids converts the Bool to an Int
Aaronepower [Coke]: Can you add an else to an inline if? 21:02
timotimo you can also $result ||= +?$<match>
Aaronepower timotimo: What's `||=`?
BooK where do you people find all the time?
timotimo well, it'll only set $result to 1 if it was falsy before
it's the same as writing $result = $result || +?$<match>
skids Well, you could ?$<match> ?? dostuff !! dootherstuff 21:03
Geth doc: 7f12deab88 | Coke++ | doc/Language/testing.pod6
simplify phrasing
21:13
travis-ci Doc build errored. Coke 'simplify phrasing' 21:17
travis-ci.org/perl6/doc/builds/276617419 github.com/perl6/doc/compare/9f6da...12deab88ac
buggable [travis build above] ☠ Did not recognize some failures. Check results manually. 21:17
Aaronepower Is there a way to substitute where the substitution generates a new value? 21:26
timotimo yes
use S/// instead of s/// or the .subst method
leont didn't know S/// :-o 21:28
Aaronepower timotimo: My code is `make (join ' ', $/.list) ~~ S/'(' .* ')'//` which gives me the same `Cannot assign to read-only value` and says `Smartmatch with S/// is not useful` 21:34
BenGoldberg In perl5, the way to make s/// (or tr///) generate a new value is by passing a /r flag at the end. 21:35
BenGoldberg wonders whether it would be useful to have s:r/// do the same ;) 21:36
geekosaur Aaronepower, in perl 5 ~~ temporarily binds something to $_. in perl 6 it is *always* a smartmatch, and it would be smartmatching against the *reslt* of the S/// 21:38
use 'given' instead of ~~
skids Aaronepower: S/// works on the topic. Instead S/'(' .* ')'// given $/.list.join(' ') 21:38
Aaronepower geekosaur: The compiler said that too. I just assumed given was part of the error message, not an operator. 21:39
Aaronepower skids: That gives me `Cannot assign to a readonly variable ($/) or a value` 21:44
skids Hrm I suspect some issues with $/ due to the rx-inside-rx. 21:53
m: "f,g,h,i" ~~ /([<alpha>])+ % "," { say "nay"; make "foo"} /; $/.made.perl.say
camelia nay
"foo"
skids m: "f,g,h,i" ~~ /([<alpha>])+ % "," { say my $a = S/./y/ given "nay"; make "foo"} /; $/.made.perl.say
camelia yay
Nil
skids That seems broken to me at first glance. 21:54
Aaronepower skids: Mine is in a Action object for a Grammar I don't know if that makes it different? 21:59
skids Maybe.
Hrm well maybe not so broken on second thought 22:00
m: perl6 -e '"f,g,h,i" ~~ /([<alpha>])+ % "," { my $slash = $/; say my $a = S/./y/ given "nay"; $slash.make("foo")} /; $/.made.perl.say' 22:02
camelia 5===SORRY!5=== Error while compiling <tmp>
Two terms in a row
at <tmp>:1
------> 3perl6 -e7⏏5 '"f,g,h,i" ~~ /([<alpha>])+ % "," { my
expecting any of:
infix
infix stopper
postfix
statement en…
skids m: "f,g,h,i" ~~ /([<alpha>])+ % "," { my $slash = $/; say my $a = S/./y/ given "nay"; $slash.make("foo")} /; $/.made.perl.say 22:03
camelia yay
"foo"
skids Maybe try routing around your $/ getting clobbered like that.
Aaronepower skids: I tried `method items($/) { my $a = $/; make S/'(' .* ')'// given $a.list.join(' ') }` no such luck. 22:05
skids You have to do the make on the $a. 22:06
Aaronepower skids: I don't know what you mean by that. 22:07
skids $a.make. not just "make". 22:08
because make works on $/ and after the S/// your $/ is the match from that, not yout current cursor in the grammar.
("method items($a)" might shorten that fist part up.) 22:11
Aaronepower skids: Tried this. same readonly error. paste.rs/zmG
Zoffix Aaronepower: just don't use $/ as the parameter 22:12
skids Try "method items($a)" maybe? Might work, might not. 22:13
Aaronepower skids, Zoffix: Yes that worked thanks! 22:14
Zoffix Aaronepower: I also find .subst() easier to use than S/// 22:15
method items($m) { make .list.subst: /'(' .* ')'/ with $m } # if I understand your original code correctly
method items($m) { .make .list.subst: /'(' .* ')'/ with $m } # if I understand your original code correctly
method items($_) { .make .list.subst: /'(' .* ')'/ } # if I understand your original code correctly
Zoffix ^_^ 22:15
Aaronepower Zoffix: There's a join missing, but that looks good! 22:16
skids List.Str is reliably .join(' '), no? 22:17
Zoffix I think so, which is why I left it out
Aaronepower I never knew that.
Aaronepower Zoffix: I tried that code, "Too few positionals passed" 22:18
skids Yeah S02-types/list.t:is (5, 7, 8).Str, '5 7 8', '.Str on a List';. Should very likely never change. Aside from that, lots of tests would break. 22:19
Zoffix Aaronepower: ah right, I forgot the replacement part 22:20
method items($_) { .make .list.subst: /'(' .* ')'/, '' } # if I understand your original code correctly
Aaronepower Zoffix: Hah, nope same error. :p
Zoffix method items($_) { .make: .list.subst: /'(' .* ')'/, '' } # if I understand your original code correctly 22:21
Can't type at all :)
5th time a charm, eh/
Aaronepower Is there any easy way to remove Hash keys which have a value of Nil? 22:25
Zoffix m: my %h = :a42, :b70, :c(Nil), :d(Nil); %h .= grep: *.value.defined; dd %h 22:26
camelia Cannot allocate memory
Zoffix m: my %h = :a42, :b70, :c(Nil), :d(Nil); %h .= grep: *.value.defined; dd %h
camelia Cannot allocate memory
Zoffix m: my %h = :a42, :b70, :c(Nil), :d(Nil); %h .= grep: *.value.defined; dd %h
camelia Cannot allocate memory
Zoffix :/ 22:27
c: HEAD my %h = :a42, :b70, :c(Nil), :d(Nil); %h .= grep: *.value.defined; dd %h
committable6 Zoffix, ¦HEAD(213c3e3): «Hash %h = {:a42, :b70}»
Zoffix c: HEAD my %h = :a42, :b70, :c(Nil), :d(Nil); dd %h».defined 22:28
committable6 Zoffix, ¦HEAD(213c3e3): «Hash % = {:a42, :b70, :!c, :!d}»
Zoffix doesn't get that result....
AlexDaniel Zoffix: what do you get?
Zoffix s/get/understand/;
AlexDaniel ah
skids m: my $a := :{ "ak" => "av" }; $a.say; $a{Nil}++; $a.say; $a{Nil}:delete.say; $a.say; 22:29
camelia {ak => av}
Use of Nil in string context
{Nil => 1, ak => av}
1
{ak => av}
in block <unit> at <tmp> line 1
skids Funny it warns on the string context, then works.
skids Oh it must be warning inside the say" 22:31
Zoffix lizmat: thanks. I'll try to give Think Perl 6 a more thorough read before writing the Green Book (which will likely be a year or more from now). Just flipped through some of it right now and I think I'm aiming for a much more informal and practical approach. Something Average Joe could pick up and get a new skill to do small one-scripts, rather than necessarily "thinking like a computer scientist". Just today 22:51
I was reading about #include's in my C book and I remember how much of a deal the teacher made about them in college, despite them being so trivial to learn. So that's my goal, leave the science well-hidden.
azawawi hi 23:28
azawawi waves
azawawi AlexDaniel: ping 23:36
AlexDaniel hello
azawawi AlexDaniel: sorry for the latest reply for github.com/azawawi/perl6-ncurses/issues/16 23:36
azawawi AlexDaniel: but i cant replicate it on my system somehow 23:37
AlexDaniel azawawi: oh
maybe I fixed it
azawawi AlexDaniel: can you try it now? 23:38
AlexDaniel sure
azawawi cool
azawawi is waiting for travis-ci.org/azawawi/perl6-ncurse.../272484221 to finish 23:39
first one is working on rakudo latest... waiting for macos ci 23:41
AlexDaniel azawawi: yes gist.github.com/Whateverable/87fef...58f001455e 23:42
azawawi so how did you fix it? :) 23:43
AlexDaniel azawawi: so basically we now disable buffering if you use Test
azawawi: so we get old behavior in this particular case
azawawi aha ok 23:44
AlexDaniel azawawi: buffering had to be disabled for RT #132108
synopsebot6 Link: rt.perl.org/rt3/Public/Bug/Display...?id=132108
azawawi travis-ci.org/azawawi/perl6-ncurse.../272484217 # PASS on all supported platforms :) 23:45
AlexDaniel azawawi: note, however, that the test in your module is probably wrong 23:46
but I couldn't find a way to improve it because newterm is NYI
azawawi SCREEN * newterm(const char *,FILE *,FILE *) # ? 23:47
AlexDaniel yea 23:48
azawawi how do you get a FILE pointer from a perl6 IO handle... temporary files? 23:49
AlexDaniel nativecallable6: void newterm(const char *,FILE *,FILE *); 23:50
nativecallable6 AlexDaniel, gist.github.com/ed59f2eeb308100d49...b449dfcc19
AlexDaniel nativecallable6: #include <stdio.h>; void newterm(const char *,FILE *,FILE *); 23:51
nativecallable6 AlexDaniel, gist.github.com/e95ec65f0b9bd40b11...95cedf9ba1
AlexDaniel haha. Well I was just curios as to what it's going to give
u
azawawi: I don't know :) 23:52
azawawi we can ofcourse native fopen the file and pass it to it 23:53
geekosaur hm, yuck. terminfo is easier, it's a fd. forgot curses does the C thing 23:58
er, stdio thing
which actually complicates the buffering issue...
azawawi like i thought... github.com/seanohalpin/ffi-ncurses...erm.rb#L34 # :)