»ö« Welcome to Perl 6! | perl6.org/ | evalbot usage: 'perl6: say 3;' or rakudo:, niecza:, std:, or /msg p6eval perl6: ... | irclog: irc.perl6.org/ | UTF-8 is our friend!
Set by sorear on 4 February 2011.
thou o/ 03:57
masak morning, #perl6 05:48
cosimo__ morning, masak 05:53
masak commutes for a second day of teaching 05:57
pmichaud good morning, #perl6 06:02
good morning, masak++
diakopter o_O 06:03
moritz \o 07:00
hoelzro morning perl6 folk 07:06
kresike good morning all you happy perl6 people 07:47
tadzik good morning 08:02
phenny tadzik: 16 Aug 18:55Z <japhb> ask tadzik I'm making decent progress locally on panda fixes and improvements; would you prefer I send pull requests, or do you prefer to hand out commit bits?
tadzik japhb: you've just been commit-bitten :) 08:03
japhb: if you plan to break existing stuff, please do that in a branch
sergot Hi! o/ 11:28
tadzik o/ 12:26
JimmyZ moritz: ping 13:48
[Coke] Wow, quiet in here. 14:06
JimmyZ because of yapc:eu? 14:07
colomon www.technologyreview.com/view/42892...me-theory/ 14:09
JimmyZ: presumably so. but not sure why they aren't all chattering on here, too! 14:10
JimmyZ may they are enjoy party
*maybe
beer party \o/ 14:11
colomon golem.ph.utexas.edu/category/2012/0...es_in.html 14:12
japhb tadzik, thanks for the commit bit! I've got a few fixes and minor enhancements I'll push to master, and then some more invasive stuff I'll throw in a branch. 14:18
(Where 'invasive' is only moderately so -- but you might disagree with the basic design idea, so it's worth discussing.) 14:19
tadzik sure, go ahead 14:21
PacoAir perllinux.sourceforge.net 14:24
colomon tadzik: hey, how are things going at YAPC::EU?
tadzik colomon: we're actualy before YAPC::EU still 14:25
discussing stuff in Perl, Germany :)
colomon but there's a lot of us out there, right?
tadzik right
japhb tadzik, what do you think about setting the panda repo to feed dalek? 14:28
tadzik japhb: I think it is set
remember how I killed it 3 times one night? ;)
japhb Huh. I just pushed master seemingly successfully, and dalek isn't talking ... oh, I see, not in channel 14:29
tadzik ha, that explains it
japhb d'oh!
No, dalek is in channel, but I couldn't see it because of bad chat client UI. :-( 14:30
tadzik reads commitlog
no, I don't see it either
japhb ? 14:31
japhb investigates
eiro_ perllinux.sourceforge.net ? is this a recent project ? wow ... sf.net still online
hello all :)
tadzik hey eiro_ :) 14:32
eiro_: HN discussion says it's from 2001 or so
japhb I see the commits and branches on github
colomon perllinux is not recent at all, it's about a decade... what tadzik says.
japhb well, branch (I only added one)
tadzik japhb: I like the new `panda list` 14:33
not sure what the git url is useful for though
and it now doesn't fit on my normal terminal size :)
japhb Because in the branch, it shows when you installed from a local spot. :-) 14:34
tadzik a-ha!
lemee look into that
japhb And the next thing I was planning to work on in that branch is adding the 'git describe --always --dirty' output from the install time.
dalek nda: 3a62063 | (Geoffrey Broadwell)++ | bin/panda:
Begin enhancing 'panda list': version and source url columns; automatic column widths for name and version columns
14:35
nda: d6ca1c7 | (Geoffrey Broadwell)++ | rebootstrap.pl:
reboostrap.pl improvements: Save a backup of the old state file, add comments, refactor to limit repeating hardcoded statefile path
nda: 59e1126 | (Geoffrey Broadwell)++ | .gitignore:
Add *~ to .gitignore
nda: f6b9fde | (Geoffrey Broadwell)++ | projects.json.bootstrap:
Fix description of Test::Mock in projects.json.bootstrap
japhb And a pending fix in the branch is that bootstrap/rebootstrap should install panda from $cwd, rather than '.', so it can show up properly in the panda list output.
tadzik ah, there we are :)
japhb Yeah, appears dalek is just slow to notice this morning 14:36
tadzik japhb: what's the new branch name?
japhb "pending fix" ==> "fix I am planning to make but isn't there yet"
verbose-list
dalek nda/verbose-list: 2ba908f | (Geoffrey Broadwell)++ | lib/Panda/Ecosystem.pm:
When installing, save a snapshot of that project's metainfo into the statefile
nda/verbose-list: d0553e2 | (Geoffrey Broadwell)++ | bin/panda:
Display saved metainfo for installed projects when doing 'panda list'
tadzik speaking of which..
japhb ... and there it is. ;-)
mhasch tadzik: since you are in Perl, do you plan to bring a souvenir from there? 14:37
japhb The controversial bit there is that I've added another "column" to the state file, which is a snapshot of the metainfo of the project at the time of the install.
tadzik mhasch: probably :)
hm
eiro_ hey tadzik \o/ almost YAPC! happy to see you all again 14:38
japhb I didn't really have a better idea for something that A) wouldn't skew against the state file over time, and B) would capture the exact install-time state of the project. 14:39
eiro_ haha ... old idea then (perllinux) as well as psh, zoidberg and so on.
tadzik japhb: so we display versions correctly in panda list
tadzik like, installed version, not available version, right? 14:39
japhb tadzik, exactly, as well as local install dir, etc.
RIGHT
tadzik awesome
eiro_ now i'm dreaming about a repl on top of perlude: i'm ready to give *sh away 14:40
tadzik so you now can know what you should update, as long as modules are properly versioned
japhb Bingo
(That was about 2-3 feature ideas down the line, but already on my mind. ;-)
tadzik one of ideas I'm keeing in the back of my mind is to keep track of files too 14:41
so you can actually uninstall modules, no one can do that yet :P
that's why there's instlaled and installed-dep, so we can do some sort of GC if we want to
japhb right, I figured. ;-)
mhasch I once was wearing a perl t-shirt in a distant place and met a guy from Perl who thought he had found somebody from home. That was funny. 14:42
japhb Although with the multi-column 'panda-list', we might want to figure out a shorter way to say "[installed for dependencies]" because it makes that column really wide.
tadzik I'd just put that in panda info 14:43
japhb heh, 'panda-list', I've been talking about git too often. ;-)
tadzik I'd like to keep list possibly short, as in, not-wide ;)
tadzik consider dpkg -l 14:43
japhb I agree. Perhaps a --verbose option to show more details, but not the default
tadzik well, it's screen width awae too
sirrobert I'd love to see dependencies put into an application subfolder (like nodejs uses). Is that something it can already do? 14:44
mhasch Although he should have figured his home town would not advertise a big blue onion.
japhb As soon as we have TermInfo. ;-)
sirrobert (via panda install, I mean) 14:44
tadzik sirrobert: you can use DESTDIR env variable
sirrobert ok, cool
tadzik mhasch: hehe
sirrobert tadzik: at some point I'll check out having ufo's makefile do that by default to install deps 14:45
japhb DESTDIR is something I wanted to ask about -- why does DESTDIR get folded into a subdir of cwd?
tadzik ...it does?
japhb ISTR so, yes
tadzik it's horribly wrong then :) 14:46
japhb yeah, 'git grep DESTDIR' and you'll see it in a couple places.
tadzik oh, bin/panda: destdir => %*ENV<DESTDIR> ?? "{cwd}/%*ENV<DESTDIR>" 14:47
mhasch I hate screen width aware behaviour. Make the output terse alright, but do not change it based on silly heuristics.
tadzik wth did I do that
japhb Wasn't me. ;-) 14:48
tadzik was me :)
japhb tadzik, the cwd/DESTDIR behavior is also in bootstrap.pl, in case you missed it. 14:54
tadzik strange 14:55
want to look at it?
japhb Yeah, if it was only that way in one place, I would have figured just a buglet. But that it was *consistent* across multiple files, I figured you had a good reason.
"look at it" how? I'm not sure I understand. 14:56
You mean "change it and commit"? 14:57
tadzik I don't remember testing DESTDIR extensively, or maybe at all
japhb Ah!
tadzik yeah, change it and see if it works
japhb Gotcha.
Yeah, I can do that in a few minutes. Have some RL stuff to attend to for a bit.
tadzik sure 14:57
japhb While I'm AFK, some food for thought: If you supply DESTDIR, does that imply a separate state file? Can the dependencies shown in one state file satisfy the other? 14:59
really afk &
tadzik my first thought was that if DESTDIR's set, then we don't modify the statefile 15:00
tadzik afks as well 15:01
masak good morning, #perl6 15:21
hoelzro o/ masak
JimmyZ morning masak 15:22
crab2313 o/ masak
japhb o/
tadzik, hmm ... so basically if you use DESTDIR, you're in charge of your own dependencies and state and such? That seems a bit strong. OTOH, what if we give the user an envvar or something that allows them to set the statefile to use as well ...? 15:23
kresike bye all 15:35
sirrobert r: Str.Str 16:34
p6eval rakudo efde6e: OUTPUT«use of uninitialized value of type Str in string context in block at /tmp/IvxMoRBJGu:1␤␤»
sirrobert r: Str eq 'foo'
p6eval rakudo efde6e: OUTPUT«use of uninitialized value of type Str in string context in block at /tmp/k7NrGzy7hC:1␤␤»
sirrobert r: my $foo; $foo eq 'foo' 16:35
p6eval rakudo efde6e: OUTPUT«use of uninitialized value of type Any in string context in block at /tmp/OHZxmJ8pkU:1␤␤»
masak sirrobert: lots of interactions with undefined variables provide such warnings.
sirrobert r: my $foo; say ($foo && $foo eq 'foo') ?? "yep" !! "nope"
p6eval rakudo efde6e: OUTPUT«nope␤»
sirrobert masak: thanks =) 16:36
masak (and type objects are undefined)
sirrobert masak: was trying to figure out how to do a comparison on something that may or may not have a value
(a hash value, in particular)
masak r: my $foo; say ($foo // "explicit default") eq "OH HAI"
p6eval rakudo efde6e: OUTPUT«False␤»
sirrobert hmmmm 16:37
I haven't encountered // before
masak r: my %h; say (%h<foo> // "totally missing") eq "OH HAI"
p6eval rakudo efde6e: OUTPUT«False␤»
masak sirrobert: // is like || except it picks the rhs if the lhs is undefined.
sirrobert huh cool
masak || picks it if the lhs is falsy.
sirrobert right
great... thanks! 16:38
masak kowtows
sirrobert is it a string comparison?
oh, it's just truthiness
masak what is?
sirrobert //
masak it's not about truthiness. || is 16:39
// is about definedness
sirrobert ohhh, I missed the compound nature of the condition
masak r: for Str, "foo" { say $_ // "default" }
p6eval rakudo efde6e: OUTPUT«default␤foo␤»
sirrobert my %h; say (%h<x> // 'x') eq 'x'
r: my %h; say (%h<x> // 'x') eq 'x'
p6eval rakudo efde6e: OUTPUT«True␤»
sirrobert r: my %h; say (%h<x> // 's') eq 'x' 16:40
p6eval rakudo efde6e: OUTPUT«False␤»
sirrobert I see, I was sort of silently omitting the 'eq...' in my mental parser =)
that has some neat power to it.
r: my %h; say %h<x> // 'x' eq 'x' 16:41
p6eval rakudo efde6e: OUTPUT«True␤»
sirrobert r: <<Foo>>.WHAT 16:43
p6eval rakudo efde6e: ( no output )
sirrobert r: say <<Foo>>.WHAT
p6eval rakudo efde6e: OUTPUT«Str()␤»
masak sirrobert: 'eq' is tighter than '//', so the above probably doesn't mean what you want it to mean. 16:46
sirrobert masak: thanks 16:46
was just testing precedence
masak r: my %h = x => 42; say %h<x> // 'x' eq 'x' 16:47
p6eval rakudo efde6e: OUTPUT«42␤»
masak well, your case didn't exhibit the precedence ;)
by the way, S03 has a precedence table which you might find useful.
that's how I checked which one was tightest. 16:48
sirrobert great! thanks
masak huh! the programming language Idris has a "so" data type "which guarantees that the value is true". I wonder if this was inspired by Perl 6, or if it's just convergent evolution. 16:53
sirrobert what's p6's equivalent?
colomon sirrobert: I think he's thinking of "but true" 16:58
sirrobert ah
masak no, I'm thinking of the Perl 6 function 'so', which boolifies values at a looser precedence than prefix:<?> 17:01
sirrobert didn't know about that 17:02
colomon but p6 so isn't a data type...
masak indeed it is not.
sirrobert but that may be the Idris conceptual equivalent of the p6 version
masak yes, I got that feeling. 17:03
sirrobert just spent 30 minutes learning the difference between <<>> and Q<<>> =) 17:06
masak are you sure you don't want <> ? 17:08
r: .say for <foo bar baz>
p6eval rakudo efde6e: OUTPUT«foo␤bar␤baz␤»
sirrobert I was using <<>> to quote things
which apparently works except in some cases =)
masak <<>> isn't completely implemented in Rakudo. 17:09
sirrobert now I realize that <<>> is a ... method postfix thing
masak I don't know about Niecza.
a "method postfix thing"? it's a circumfix quoting operator.
sirrobert r: sub f (Str $s) {say $s}; f(<<Foo Bar>>);
p6eval rakudo efde6e: OUTPUT«Nominal type check failed for parameter '$s'; expected Str but got Parcel instead␤ in sub f at /tmp/VbcEaZreAv:1␤ in block at /tmp/VbcEaZreAv:1␤␤»
sirrobert r: sub f (Str $s) {say $s}; f(Q<<Foo Bar>>); 17:10
p6eval rakudo efde6e: OUTPUT«Foo Bar␤»
sirrobert I had been using <<>> as Q<<>> 17:11
ohhhh .<<>> is the method postfix operator
I missed the .
well, then I don't know what the issue was, except that <<>> breaks function calls and Q<<>> doesn't =)
masak there's no .<<>> method postfix operator as far as I know. 17:12
sirrobert www.perlfoundation.org/perl6/index....kup_tablet
masak there's @things>>.foo
sirrobert in the table of precedence in the Operators section.
L . Method postfix . . . . .meth .+ .? .* .() .[] .{} .<> .<<>> .:: .= .^ .:
masak oh, sorry. 'course
yes, that's hash access. 17:13
sirrobert no idea what it does, I was just going off the tablet
masak r: my %h = foo => 42; say %h.<<foo>>
p6eval rakudo efde6e: OUTPUT«42␤»
sirrobert ahhh
masak I tend to write it without the dot.
r: my %h = foo => 42; say %h<<foo>>
p6eval rakudo efde6e: OUTPUT«42␤»
sirrobert me too
masak can also use French quotes.
sirrobert it interpolates?
masak r: my %h = foo => 42; say %h«foo»
p6eval rakudo efde6e: OUTPUT«===SORRY!===␤Confused␤at /tmp/Uwg_RuCELx:1␤»
masak heh; that should work. 17:14
it does a shell-like interpolation, yes.
sirrobert my %h = foo => 42; my $f = "foo"; say %h<<$f>>;
masak but... not yet in Rakudo.
sirrobert r: my %h = foo => 42; my $f = "foo"; say %h<<$f>>;
p6eval rakudo efde6e: OUTPUT«Any()␤»
sirrobert ok
masak meh, the ECMA-262 v3 specification is so boring it makes me sad. :/ 17:16
sirrobert heh 17:17
dalek rl6-roast-data: 6575718 | coke++ | p (2 files):
today
19:52
[Coke] wishes someone would update pugs so that it didn't have PIDs in the test output, making it harder to spot diffs between runs.
rjbs Disheartening: work for 7 hours, then see the diff stat is 5 files changed, 159 insertions(+), 77 deletions(-) 20:06
I don't know why. I just feel like I did more than that. :)
sirrobert sorry =) 20:07
rjbs It's okay, just don't let it happen again.
sirrobert I spent much of the day on SQL stuff (whug)
I garauntee it: today will never happen again.
r: sub foo (Hash %h) { say %h; }; foo { one => 1, two => 2, }; 20:10
p6eval rakudo efde6e: OUTPUT«Nominal type check failed for parameter '%h'; expected Associative but got Hash instead␤ in sub foo at /tmp/ccq2iOxdnq:1␤ in block at /tmp/ccq2iOxdnq:1␤␤»
sirrobert (How) do I do a hash literal?
a Hash is an EnumMap, which is an Associative... 20:11
colomon n: sub foo (Hash %h) { say %h; }; foo { one => 1, two => 2, }; 20:13
p6eval niecza v19-21-gc86e8e5: OUTPUT«{"one" => 1, "two" => 2}␤»
colomon oh
r: sub foo (%h) { say %h; }; foo { one => 1, two => 2, };
p6eval rakudo efde6e: OUTPUT«("one" => 1, "two" => 2).hash␤»
colomon Hash %h is a hash of hashes
if you just want a hash, you either need to say Hash $h or just %h
sirrobert r: sub foo (%h) { say %h; }; foo { one => 1, two => 2, };
p6eval rakudo efde6e: OUTPUT«("one" => 1, "two" => 2).hash␤»
sirrobert right, I keep forgetting that 20:14
the % makes it explicit anyway
thanks =)
mathw Evening 20:24
colomon sirrobert: it's not quite the same. %h is something like Associative $h... if you really want a Hash, you need to say Hash $h. or maybe %h where { %h ~~ Hash } 20:25
mathw: o/
mathw colomon: o/
tadzik japhb: I don't have any strong opinion on this, really
sirrobert colomon: hmm ok
tadzik but I think that the usecase of DESTDIR is mostly "I want to bundle this module somewhere" 20:26
colomon sirrobert: but certainly the idiomatic way to do it would be %h unless you have a really good reason to do otherwise. 20:28
sirrobert When I create a deployable app, I want each app to have it's own modules
(to tadzik)
colomon: yeah. that'
colomon: yeah, that's what I settled on
colomon: thanks, btw, I would have been stuck on that for a while =) 20:29
colomon sirrobert: no worries, you're not the first person to make that mistake. ;)
sirrobert I like the quote that Perl 6 isn't intended to be a first language, but a last one. 20:30
I don't mind the learning curve; it's worth it for the power and elegance.
(hence my use if vim ;)
s/if/of/ 20:31
mathw all a language has to do for me is prove that learning curve is worthwhile 20:32
:)
and then manufacture a couple of days in which to start studying it
sirrobert Is there a way to execute a method on each object in a list of objects? 20:33
like, a good shorthand way
mathw @list.map: *.method;
benabik sirrobert: @list>>.method 20:34
sirrobert nice
ooh
two of them =)
mathw those aren't the same
sirrobert uh oh... syntax fight
mathw >>. executes potentially in parallel
sirrobert that's cool
mathw .map goes in order
benabik Which means if .method has side effects, it's better to use .map than >>.
sirrobert righto 20:35
mathw definitely, unless you know for sure they can happen in any order and simultaneously without making a mess
benabik nr: my @a = 1,2,3,4,5; @a.map: *.print; say; @a>>.print; say
p6eval rakudo efde6e: OUTPUT«␤53142␤»
..niecza v19-21-gc86e8e5: OUTPUT«===SORRY!===␤␤Unsupported use of bare 'say'; in Perl 6 please use .say if you meant $_, or use an explicit invocant or argument at /tmp/oip5v4aTv1 line 1:␤------> my @a = 1,2,3,4,5; @a.map: *.print; say⏏; @a>>.print; say[0…
benabik Hm. Right, I should test my demo snippets.
sirrobert heh
benabik r: my @a = 1,2,3,4,5; @a.map(*.say) 20:36
p6eval rakudo efde6e: ( no output )
benabik expected output there. 20:37
r: my @a = 1,2,3,4,5; .print for @a; say ''; @a>>.print
p6eval rakudo efde6e: OUTPUT«12345␤53142» 20:38
benabik That's what I meant to demonstrate, even if map isn't cooperating with me.
sirrobert so my particular case is that I have a hash of objects (as values) and I want to call a method on a set of them (in a particular order)
this is super nice, syntactically:
r: my %h = { a => 1, b => 2, c => 3, }; %h<b a>.say;
p6eval rakudo efde6e: OUTPUT«2 1␤»
sirrobert ha!
benabik That is saying the array that the hash returned. 20:39
r: my %h = { a => 1, b => 2, c => 3, }; %h<b a>.perl.say;
p6eval rakudo efde6e: OUTPUT«(2, 1)␤»
sirrobert ohhh!
benabik Well, the parcel, I guess.
sirrobert well, then "ha."
=)
colomon r: my @a = 1,2,3,4,5; @a.map(*.say).sink
p6eval rakudo efde6e: OUTPUT«No such method 'sink' for invocant of type 'List'␤ in block at /tmp/iJQEJK4QnZ:1␤␤»
sirrobert ohhhhhh crud, I'm going to be late to meet my wife for dinner. bye p6
mathw bye sirrobert 20:40
benabik o/ sirrobert
colomon: Oh. Yet another sink context error?
colomon I reckon. hold on
r: my @a = 1,2,3,4,5; my @b = @a.map(*.say) 20:41
p6eval rakudo efde6e: OUTPUT«1␤2␤3␤4␤5␤»
benabik colomon++
colomon r: my @a = 1,2,3,4,5; my @b := @a.map(*.say)
p6eval rakudo efde6e: ( no output )
benabik So >>.method may run out of order but .map(*.method) may never run! :-D
timotimo is that lazyness in action?
benabik timotimo: That's a lazyness bug in action. :-D 20:42
colomon timotimo: my last example was, yes
benabik Oh, true. In that example it's not a bug.
colomon it's only a bug if you want the side-effects. ;)
benabik We need infix:<$!>
mathw haha 20:43
no we don't
that one always makes me uncomfortable
benabik It shouldn't. 20:44
`f $! x` just means be sure you evaluate x before passing it to f.
mathw yeah, but any use of strictness annotations makes me a bit nervous 20:46
I always feel like I shouldn't have to 20:47
and there are some semantic implications of having seq that are weird. I don't really understand that though. 20:48
benabik In Haskell, $! lets the compiler know "no really, I'm going to need this value eventually". It can really keep down the space needed for computation. 20:55
tadzik p6rd: releasese 20:56
[Coke] github.com/zag/ru-perl6-book ... a book about perl6 written in pod6, in russian. 21:13
but he uses pod6-in-perl5 to build the book. 21:14
rjbs [Coke]: ;) re: tpf gc email 21:20
japhb One of those idle thoughts while waiting for a very slow server to do something: I wonder if doing a Perl/Linux clone with Perl 6 wouldn't be a pretty good way to feel out the weak points in Perl 6's (or our implentations') *nix support ...\ 21:39
Just looking at the commands listed in that Perl/Linux screenshot make me think about a lot of fiddly system fiddling bits.
(Some of course are pretty trivial ... I'm thinking of the ones that aren't.) 21:40
moritz in Perl 22:23
moritz and the wifi here is slow. ssh URLs work better than git:// urls 22:27
dalek kudo/nom: 7aeb019 | moritz++ | src/core/Exception.pm:
spelling
22:28
kudo/nom: 8ca98e1 | moritz++ | src/core/Exception.pm:
X::Placeholder::Mainline now inherits from X::Placeholder::Block
kudo/nom: 92899a2 | moritz++ | src/ (3 files):
s:g/package-type/package-kind/
kudo/nom: 13fee9c | moritz++ | src/ (2 files):
make X::Attribute::Undeclared subclass X::Undeclared
kudo/nom: 9c318f9 | moritz++ | src/ (2 files):
report parameter name in X::Parameter::Default
kudo/nom: 1e651ce | moritz++ | src/ (3 files):
awesomify X::Parameter::WrongOrder and X::Parameter::MultipleTypeConstraints
kudo/nom: 48e5e46 | moritz++ | docs/deprecations:
Add docs/deprecations

Authors of star and compiler release announcements may look here for deprecation notices.
ecs: fe14bc6 | moritz++ | S32-setting-library/Exception.pod:
X::NYI is really a class
22:29
specs: f95bbea | moritz++ | S32-setting-library/Exception.pod:
specs: [S32::Exception] fix typo
jeffreykegler r: r: my $x = 1 ; say 42 ?? $x = 43 !! $x = 44; 22:36
p6eval rakudo efde6e: OUTPUT«===SORRY!===␤Confused␤at /tmp/eqp6WzAcIP:1␤»
jeffreykegler r: my $x = 1 ; say 42 ?? $x = 43 !! $x = 44;
p6eval rakudo efde6e: OUTPUT«44␤»
tadzik moritz: obtw, panda can install p6doc now
jeffreykegler Sorry about the first. The second is, according to S03, supposed to be a syntax error. 22:37
That is how I read the section on "Conditional operator precedence" 22:38
Btw, if it is not a syntax error, according to S03, 44 is indeed the right answer
japhb moritz, don't forget to update doc/type-graph.txt for all of those exception inheritance changes. ;-) 22:45
japhb moritz++ # docs/deprecations 22:46