Prelude was borken (worked around now): sial.org/pbot/11497 | pugscode.org/ <Overview Journal Logs> | pugs.kwiki.org | paste: sial.org/pbot/perl6 | Chip needs help!!! www.geeksunite.net
Set by autrijus on 4 July 2005.
nothingmuch loveliest regex ever: qr/(?!)/ 00:29
geoffb OK, with that housekeeping commit, AFK for a bit
svnbot6 r5330, geoffb++ | Update hack.pod source map:
r5330, geoffb++ | * Add a few missing second-level directories
r5330, geoffb++ | * Reorder a couple clearly out of place directories
r5330, geoffb++ | The question of whether directory sorting should be case sensitive is open
r5330, geoffb++ | to the masses; I didn't make any moves to fix this issue.
nothingmuch perlmonks.org/?node_id=473596 02:18
nothingmuch laughs manically
who needs rules, eh?
stevan stop showing off your reg-exp-fu and code up the meta-model signatures man!!!! 02:35
nothingmuch stevan: sorry, i got distacted all night, and now it's 5:40 02:37
first I did a favour for a friend
then I tried to fix something in my server
stevan and what, I am not a friend?
nothingmuch at 3:30 or so I found that wonderful perlmonks post
uh, sure you are
stevan starts to cry
the times we shared in Toronto, they meant nothing to you, i can see that now 02:38
nothingmuch uh, i'm sorry baby 02:40
i was just, uh...
stevan LOL
nothingmuch i just felt like writing other people's code, you know? i thought you were OK with that
stevan your just a dirty stinking code whore, thats all you are :P 02:41
nothingmuch it rings better as "i felt like writing code for other people"
nothingmuch burps
stevan LOL
nothingmuch good night fair gay camels 03:21
cm camels! 03:37
autrijus greetings.
cm herro autrijus
i read half of your paper :)
autrijus gleetings cm.
cool. :) any comments so far? 03:38
cm i liked to incorporate a lot of cool Haskell stuff into pugs (libraries, parts of the hierarchical library, ..), instead of reinventing the wheel (or so it seems). 03:41
heck, you even include stuff from Oleg, whose posts i sometimes don't even try to understand :)
autrijus :) 03:45
autrijus wonders what wheels have pugs reinvented from the existing libraries 03:46
cm listens 03:50
autrijus I can't think of any :) 03:55
cm hehe 03:57
autrijus @hoogle ((a -> b) -> a) -> a 04:58
er, wrong channel.
theorbtw1 wonders what @hoogle does. 05:28
geoffb Well, clearly, it hoogles things. I mean, c'mon . . . . 05:33
lightstep it looks for standard functions with the given signature 05:38
theorbtw1 Oh, nifty. 05:40
geoffb autrijus, was this: autrijus.org/svk-overview.png created using a drawing GUI or a drawing language? If the latter, which one, and can we see the source? 05:42
obra It was created with Visio 05:43
geoffb bah
I was hoping for a very evolved version of pic 05:44
"Real men write Postscript by hand." :-) 05:45
dudley www-users.cs.york.ac.uk/~ndm/hoogle/
that's pretty damn cool.
www.hoogle.net/ is probably not what you want, though :-) 05:46
Or maybe it is, I don't really want to know ;-) 05:47
My last few googles from things I've learned here have been pretty NSFW. First sexy typing, now hoogle... 05:48
geoffb NSFW?
dudley Not Safe For Work 05:49
geoffb ah
geoffb works from a home office, so very little is NSFW. :-)
OK, getting tired, so going to bust off now. 05:50
G'night all.
(That would be autrijus' cue to start up several long interesting conversations so that I come back to a thousand line backlog . . . .)
06:03 theorbtw1 is now known as theorbtwo
theorbtwo Southen, what could 5`m be that would avoid having a class or function named m, and have m not be the match operator? 06:03
Only a macro, right?
masak ?eval (any(1..10) == any(10..19)) 09:29
evalbot6 bool::false
masak eh?
gaal ?eval (any(1..10) ~~ any(10..19) 09:30
evalbot6 Error: unexpected end of input expecting adverbial block, term postfix, operator, ">>=:=<<", ">>!=<<", ">>==<<", ">><=<<", ">>>=<<", ">>~~<<", ">>!~<<", ">>eq<<", ">>ne<<", ">>lt<<", ">>le<<", ">>gt<<", ">>ge<<", ">><<<", ">>><<", "\187=:=\171", "\187!=\171", "\187==\171", "\187<=\171", "\187>=\171", "\187~~\171", "\187!~\171", "\187eq\171", "\187ne\171", "\187lt\171", "\187le\171", "\187gt\171", "\187ge\171", "\187<\171", "\187>\171", "=:=", "!=", "=="
gaal ?eval (any(1..10) ~~ any(10..19))
evalbot6 bool::false
gaal ?eval ?(any(1..3) ~~ any(3..5)) 09:31
evalbot6 bool::true
gaal ?eval ?(any(1..10) ~~ any(10..19))
evalbot6 bool::true
gaal ?eval (any(1..10) ~~ any(10..19))
evalbot6 bool::false
gaal oops :) 09:32
masak, looks like a pugsbug to me...
add a t?
(brb)
masak sure, just a sec 09:34
ok, slight problem :) 09:37
i wrote is(any(1..10), any(10..19), 'Should not return bool::false because 10 == 10'); 09:38
and it runs 100 tests :)
how to get around that?
ah, i think i know
gaal ok(any == any), i think
masak i moved the comparison out into an assignment 09:39
but your idea is better, hold on
gaal that also works :) 09:40
masak strange 09:41
my test passes
gaal probably because of this:
?eval ?(any(1..10) ~~ any(10..19))
evalbot6 bool::true
gaal it looks context dependent.
(note the ?) 09:42
masak darn
so how do i cause the faulting context?
(without making 100 tests)
gaal heh, well, you can choose a smaller range :-P 09:43
but let's see.
masak :)
gaal how did you encounter this? 09:44
masak ?eval (any(1..10) ~~ any(10..19)) ~~bool::true
evalbot6 bool::false
masak as usual, just playing around with pugs
gaal because on the command line things like "say if ..." don't reproduce it.
masak every time i touch pugs i encounter a bug
gaal once again, because boolean context 09:45
sure, but *where* did you find it? just here on evalbot?
masak no, on my command line
playing around 09:46
i just wanted to see if any(1..10) == any(10..19)
which i still believe it is
?eval (any(1..10) == any(10..19)) ~~ bool::true 09:47
evalbot6 bool::false
gaal ?eval (any(1..3) == any(3..5)).perl 09:48
evalbot6 '((bool::false) | (bool::false | bool::true))'
gaal that reduces to truth.
masak ?eval (any(1..3) == any(3..5)).perl ~~ bool:true
evalbot6 Error: No compatible subroutine found: "&bool"
masak oops
?eval (any(1..3) == any(3..5)).perl ~~ bool::true 09:49
evalbot6 bool::false
masak hey!
gaal nah, that's obvisouly not the right approach -- .perl gives a string
masak yes, but ~~
gaal ?eval "str" ~~ bool::true
masak i thought that was the ultimate hand-waving operator
evalbot6 bool::false
masak ?eval "bool::true" ~~ bool::true
evalbot6 bool::false 09:50
masak ah
ok
is there a "reduce to truth or falsity" sub or something 09:51
?
gaal "?" :)
masak ah 09:52
it took me a while to realise that the question mark was in fact the answer :P
gaal hofstadter would be pleased 09:53
masak indeed
lightstep gaal, nothingmuch invited me to your house, or something like that
masak ?eval (any(1..10) == any(10..19)) 09:54
evalbot6 bool::false
gaal you are indeed invited :) let me write up the, uh, announcement!
masak thing is, i don't get this on the prompt
i get any(VJunc any(VBool False),VJunc any(VBool False,VBool True))
which is just ast for ((bool::false) | (bool::false | bool::true))
gaal yup 09:55
i don't know, this is weird.
masak so the faulty context is evalbot6
lightstep i get the same result here
masak evalbot6, get a grip!
i often wondered, who compiles evalbot6, and how often? 09:56
how do i chech if evalbot6 is compiled from the latest rev? 09:57
gaal iblech, and manually i hope.
lightstep ?eval ? (any(1..10) == any(10..19))
evalbot6 bool::true
gaal ?eval $?PUGS_VERSION
evalbot6 \'Perl6 User\'s Golfing System, version 6.2.7, June 13, 2005 (r5334)' 09:58
gaal svnbot appears to be down btw
lightstep it's relatively updated
masak i still haven't committed a test, because i can't reproduce it outside of evalbot6
lightstep: it's completely updated 09:59
june 13 is the release date of 6.2.7
gaal look at the r number. 10:00
lightstep i have r5304
gaal HEAD is 5334 :-) 10:01
question is which evalbot is actually running.
lightstep ok. my connection is weak
masak well, if evalbot6 says it's from r5334 i have no choice but to trust it 10:02
this is weird
it's 2005
and i'm actually trying to reason with a program
wow
?eval my $a = (any(1..2) == any(2..3)); ?($a.perl) 10:04
evalbot6 bool::true
masak that's something
gaal masak: see /home/roo/src/pugs/examples/network/evalbot/README.pod
masak oki
gaal er, only without my local path part :-)
masak sure :)
lightstep ?eval my $a = (any(1..2) == any(2..3)); ?$a
gaal evalbot spawns a p5 helper
evalbot6 bool::true
gaal which spawns pugs
lightstep you don't need .perl 10:05
gaal so if there's a bug in evalbot itself that's been fixed, even if it runs a new pugs then you may not see the fix until the bot is restarted.
masak lightstep: thx
gaal: so i'm chasing a bug that's already fixed? 10:06
gaal no idea
:-)
masak there should be a way to reastart evalbot6 from here :)
gaal ?eval my $a = (any(1..2) == any(2..3)); $a
evalbot6 \((bool::false) | (bool::false | bool::true))
masak when is such a value ever useful? 10:07
gaal oh, ? forces the reducion. of course.
masak i want it to collapse
on its own
but maybe that is Wrong, i dunno
lightstep doesn't it collapse in boolean contexts? i think that keeping the result for a while is good 10:08
masak gaal: who runs evalbot6?
gaal iblech
masak lightstep: but what can one use that result for? all it means is really cool::true
gaal he's away for a few days i think.
masak oh no
:( 10:09
gaal cool::true is neat.
masak the suspense is killing me!
cool:true is my own coolnary logic system :)
gaal lol
lightstep map (uncurry (==)) [(1,2), (1,3), (2,2)] is [False, False, True]
gaal nouveau cuisine is a culinary logic system. 10:10
lightstep that's how i think about comparing sets
masak bool::mu
gaal bull::moose 10:11
masak the possibilities are endless
gaal hmm, why uncurry and not reduce?
masak ?eval sub f { return not f } f() 10:12
lightstep what's reduce?
evalbot6 (no output)
masak should return bool::mu :)
gaal because arity is fixed?
lightstep uncurry (==) is a function that compares elements of a pair
gaal reduce f list can be thought of as l_1 `f` l_2 `f` l_3 ... 10:13
lightstep oh, it's foldl' in haskell
masak yes
gaal lightstep: there's a metaoperator for this in perl 6. 10:14
$sum = [+] @values
svnbot6 r5335, autrijus++ | * handle class literals as the invocant to .isa().
gaal hey, svnbot skipped some commits.
lightstep: there's a wonderful post by damian with ten examples of how useful this is. 10:15
autrijus, ping
lightstep the Haskell Standard Prelude contains "sum = foldl (+) 0", we recognize it's extremely useful
GvD doesn't like these operators, though
gaal GvD? 10:16
lightstep s/D/R/
gaal GvR?
lightstep guido var rossum, the python guy
gaal ahh yes.
lightstep anyway, the uncurry in my example was a glue operator, to maake things typecheck 10:17
gaal www.mail-archive.com/perl6-all@perl...49653.html 10:18
er, one above it in the thread actually
www.mail-archive.com/perl6-all@perl...49651.html
3, 8, and 9 are beautiful 10:20
masak yes 10:21
masak likes conway's style of writing
lightstep i don't fully understand 3, but that's a syntax problem 10:22
gaal oh, they made hash deref a method.
masak perl 6 has a way of making one dizzy... "they made hash deref a method" 10:23
that's like saying "they made reduce into a metaoperator" 10:24
gaal $apartment_no = $employees<4262><contact_info><home_address><apt_no>
lightstep can you use functions in the operator slot of a metaoperator? 10:25
masak good question 10:26
gaal sub get_apt_no_by_emp_id ($id) { [.{}] $employees, <<$id contact_info home_address apt_no>> }
an operator is just an infix function
(of course that example is completely contrived :-)
hmm, but you're asking about the other direction 10:28
autrijus said something about perl 6 not having `...`
lightstep oh 10:29
gaal (if i was understanding correctly)
masak gaal: perl 6 not having `...`? 10:30
what does that mean?
lightstep `...` turns a function into an infix op in haskell
masak aha
gaal masak: in Haskell, you can take any function and use `...` syntactic sugar to apply it in infix form
meh, too slow :)
masak so the perl 6 `...` is another `...`
same syntax, different semantics 10:31
or something
gaal lightstep's answer is actually subtly better than mine, because it doesn't imply the function needs to be immediately applied
lightstep what's `...` in perl6?
masak a way to say "not important right now" inside function bodies etc 10:32
lightstep actually, it has to be applied (or be used in a section)
masak or rather, "not declared until later" 10:33
gaal hold on, possible confusion. there's an ellipses in p6: ...
masak gaal: exactly
gaal and the's infix in Haskell: ``
masak aha!
gaal lightstep: masak was talking about the dots
masak: lightstep was talking about the quotes.
:-)
lightstep yes
masak misunderstanding of the day
lightstep i got it now
masak hofstadter would be pleased :) 10:34
gaal i feel like a marriage counsellor
masak shut up :)
lightstep yes, he would. perl6 is really close to what he portrays
gaal i will, after you write that check :-P
masak writes check 10:35
now shut up :P
gaal :)
lightstep i don't get perl syntax: "aaa 4, 6" works, but "aaa (4, 6)" doesn't
gaal huh? f'course it does. 10:36
lightstep sub aaa ($x, $y) {$x + $y}
aaa (4, 6)
*** Extra space found after &aaa (...)
gaal aaah
in perl 6, some whitespace was banned 10:37
?eval sub aaa ($x, $y) {$x + $y} aaa(4, 6)
evalbot6 10
gaal ?eval sub aaa ($x, $y) {$x + $y} aaa (4, 6)
evalbot6 Error: Extra space found after &aaa (...) -- did you mean &aaa(...) instead?
lightstep also, pugs answers by the last response when i define a sub (instead of replying with undef) 10:38
gaal i actually forgot this rule applied to func applications.
masak aaa .(4, 6) should work fine
gaal true.
lightstep, give an example? 10:39
because above you see a successful definition with a space
masak ?eval sub aaa ($x, $y) {$x + $y} aaa .(4, 6)
evalbot6 Error: Extra space found after &aaa (...) -- did you mean &aaa(...) instead?
masak hunh?
lightstep perlbot paste
perlbot Paste your code and #perl will be able to view it: sial.org/pbot/perl dragon.cbi.tamucc.edu:8080 erxz.com/pb
masak gaal: the above should work, right? 10:40
lightstep erxz.com/pb/783
gaal i think so, but no idea about implementation status in pugs.
masak ?eval sub aaa($x, $y) {$x + $y} aaa .(4, 6)
evalbot6 Error: Extra space found after &aaa (...) -- did you mean &aaa(...) instead?
masak ok
gaal aah, l, i misunderstood what you were saying this time. interesting bug. 10:42
hard to write a test for :-)
well, w/o piping and stuff at least.
lightstep yes, quite
masak gaal: what bug are we talking about?
gaal masak: erxz.com/pb/783
masak oki 10:43
lightstep actually, it depends how the shell works. maybe 'sub ...' evals to the last result in some context?
masak sees bug
woah
lightstep i might be a misfeature, not a bug
masak lightstep++ # for finding it
lightstep: what's the difference? 10:44
google define finds nothing on "misfeature"
lightstep you don't want to fix a misfeature
masak you don't?
why should it return 2?
gaal l: we can runInteractiveCommand from perl so it is in fact testable, though awkwardly.
lightstep if @svn decide that it's good, it'll be a feature. not intended, hence mis- 10:45
masak "@svn"?
lightstep the pugs commiters
masak (there's no "misfeature" wikipedia article)
lightstep: ah 10:46
"@svk", too, maybe
:)
and "@darcs"
lightstep: seems unlikely though that the pugs committers would find this particular feature to be good 10:48
to me it just seems strange
lunch 10:53
&
rafl How do I push hashes into arrays? 11:01
gaal doesn't the p5 method work for you? push a reference.
?eval my @arr = <a 1>; my %h = <one 1>; @arr.push(\%h); @arr.perl 11:02
evalbot6 '[\'a\', \'1\', ((\'one\' => \'1\'))]'
gaal hmm, that's not right.
%h got flattened. 11:03
rafl Well, @array.push({Foo => 'bar'}) gives me an other data structure than %hash = (Foo => 'bar'); @a.push(%hash);
gaal ?eval my @arr = <a 1>; my %h = <one 1 two 2>; @arr.push(\%h); @arr.perl 11:04
evalbot6 '[\'a\', \'1\', ((\'one\' => \'1\'), (\'two\' => \'2\'))]'
gaal that's a list of pairs instead of a hash :-( 11:05
?eval my %h = <one 1 two 2>; %h.perl
evalbot6 '{(\'one\' => \'1\'), (\'two\' => \'2\')}'
gaal my %h = <one 1 two 2>; %h
?eval my %h = <one 1 two 2>; %h 11:06
evalbot6 {('one' => '1'), ('two' => '2')}
rafl ?eval my @a = (); my %h = <a b c d>; @a.push(%h); @a.perl
evalbot6 '[(\'a\', \'b\'), (\'c\', \'d\')]'
rafl Hm..
gaal ?eval my %h = (one => 1, two => 2); %h 11:07
evalbot6 {('one' => 1), ('two' => 2)}
rafl ?eval my @a = (); my %h = <a b c d>; @a[0] = %h; @a.perl
evalbot6 '[{(\'a\' => \'b\'), (\'c\' => \'d\')}]'
gaal that's correct
rafl That's what @a.push(%h) should produce, right?
gaal i believe it is. 11:08
well
rafl So why doesn't it work then?
gaal that's what @a.push(\%h) should produce
i'm not actually sure about %h
rafl ?eval my @a = (); my %h = <a b c d>; @a.push(\%h); @a.perl
evalbot6 '[((\'a\' => \'b\'), (\'c\' => \'d\'))]'
rafl So, what's the right way to do it with push? I'd like that more than @a[-1] = %h; 11:15
gaal dunno. looks like there's a bug here, but i'm not sure where it is. 11:16
rafl Why do I get Can't modify constant item: VUndef? The line is "@:arr = ();". It's declared with "has @:arr;" 11:27
gaal are you in a method? 11:28
?eval class F; has @:a; method x { @:a = () } F.new.x; say "alive"
evalbot6 Error: No compatible subroutine found: "&say"
gaal class F; has @:a; method x { @:a = () } F.new.x; "alive"
?eval class F; has @:a; method x { @:a = () } F.new.x; "alive" 11:29
evalbot6 'alive'
rafl Yes: method load_parsers (::?CLASS ::class: Str ?$dir, ?$file) {
It doesn't even work with has @:a is rw; 11:32
gaal nopaste more context? that does workforme...
rafl nopaste.debianforum.de/549 11:35
lightstep how is `make test' called? 11:36
gaal lightstep, what do you mean? just 'make test' from the command line
rafl Well, no. In my script I call it as ::Foo.bar(); But it resuls in the same error.
gaal or if you want the fancy graph output, make smoke
hmm, 'has' is for memebers 11:37
looks like it's being invoked as a class method in your case 11:38
so there is no @:a
rafl Yes, it's ought to be.
Oh. How can I declare class variables?
gaal you need 'my @a', and pugs needs a better error message. :-)
i don't know how to autogenerate accessors for class variables like has does for members. 11:39
rafl Hm. If my class is named Foo everything works now. If I call it Foo::Bar I can't call methods on it: ::Foo::Bar.bar() results in No compatible subroutine found: "&bar" 11:50
gaal autrijus was working on some qualification fix, but there were problems with it so it was reverted. i don't know if it was related to things like this. 11:53
rafl Hm. Writing perl6 code is really pain at the moment. 11:55
gaal it's more like making love with an injured knee. pleasurable so long as you make no wrong moves. 11:56
12:01 Aankh|Clone is now known as Aankhen``
wolverian you mean no right moves :) 12:06
Aankhen`` An array or hash in scalar context is supposed to evaluate to a reference to itself, so `push(@a, %h)` in Perl 6 ought to be equivalent to Perl 5's `push(@a, \%h)`... 12:11
?eval [~] ('a', 'b', 'c', 'd') 12:12
evalbot6 'abcd'
theorbtwo At least in p5, the second argument of push isn't scalar context. 12:13
push (@push_into, *@to_push) 12:14
Aankhen`` I am talking about direct equivalence, not equivalent functions.
Perhaps it's better illustrated by this: `foo(@bar)` in Perl 6 is equal to `foo(\@bar)` in Perl 5. 12:15
And the same applies for %bar.
s/applies for/applies to/ # I need sleep
?eval sub foo () { return [~] ("a", "b", "c", "d") }; foo() 12:16
evalbot6 'abcd'
gaal oh, hi Aankhen``, did you see seek? 12:27
svnbot6 r5336, Aankhen++ | * HTTP::Message: excuse to use reduce metaoperators.
theorbtwo Nice commit message, Aankhen``. 12:32
gaal perl.org.il/pipermail/perl/2005-July/007258.html # Tel-Aviv Pugs Hackathon invite 12:33
theorbtwo 404. 12:35
Nevermind.
gaal something funny happened in the formatting there.
theorbtwo wonders why he can draw &, but not {...}, on paper. 12:38
castaway_ you can you silly nelly 12:39
theorbtwo (I can even do a passable Ā£.) 12:40
If you do, or don't, have 802.11, you might want to explicitly mention it.
gaal half of what i explicitly mentioned was an ethernet patch *cable* :-) 12:41
theorbtwo True enough. 12:43
gaal but i'll make a point of mentioning it again when people write to get contact info 12:44
theorbtwo I know nothingmuch lives on his 802.11.
gaal i'm sure his fancy new laptop features an rj-45 connector. :) 12:45
theorbtwo So am I.
theorbtwo shrugses.
Oh, I forgot he had to get a new one.
gaal if someone brings a wifi router, cool
greetings nothingmuch 12:54
nothingmuch hola 12:55
Limbic_Region seen autrijus 13:28
jabbot Limbic_Region: autrijus was seen 8 hours 29 minutes 15 seconds ago
nothingmuch_ Limbic_Region: the node we talked about - it's been done 13:32
473610
13:32 nothingmuch_ is now known as nothingmuch
Limbic_Region ahh, will have a look - thanks 13:40
was still getting caught up with morning email
clkao t 13:41
svnbot6 r5337, gaal++ | correct sig for Pugs::Internals::hIsOpen 13:52
gaal random statistic of the day: autrijus has made 2000 commits to pugs. 14:43
lightstep exactly? 14:44
gaal yup.
Nattfodd that's not random at all 14:45
lightstep not stochastic, random 14:46
as in "random arrests by the government"
gaal you may also be interested to know that to date, iblech has made sixty-three trillion commits. 14:48
svnbot6 r5338, autrijus++ | * Repair user-defined operators; it was broken due to the
r5338, autrijus++ | namespace fix in r5168. As a side effect, infix operators
r5338, autrijus++ | defined in other modules no longer creep into main.
gaal ...see, my statistics aren't worth much.
autrijus, there-p? 14:49
autrijus yes 14:50
gaal hey. :)
autrijus hey. :)
Limbic_Region autrijus - did you see that I modified the spaceship operator tests?
gaal so is the pugscc problem harder than was hoped?
autrijus in Set.pm there is something like
Limbic_Region s/operator/parsing/
there is still a bug 14:51
but when you changed the tests to 0, the tests passed
autrijus method prefix:<___> { ... }
(just an example)
Limbic_Region or rather - from -1 to 0
autrijus I'm wondering the visibility of that operator
should it affect everything that uses Set (a kind of "silent export")?
or something more insidious?
gaal also, i was about to ask if you could help me make sense of sexy types but it appears that i'm being abducted by friends to the beach, so that will have to wait :-) 14:52
autrijus gaal: no, it wasn't harder than hoped, it's just I never got the sanity to look at it
gaal yes, sanity is scarce around these parts.
autrijus gaal: my sanity window is still in short supply :-/
gaal: I think I can explain sexy types in 10 mins if you have it
if not that'd need to wait :)
gaal nominally i have six, but we're lucky: my friends are chrinically late. 14:53
autrijus heh.
okay, let's start
gaal i have the sexy types paper in front of me.
autrijus oh cool.
gaal not the pyton-jones one, the summary one.
by Chung-chieh Shan
autrijus right, by ccshan 14:54
so let's look a simple one
gaal Peyton. Dangerous typo.
okay
autrijus Pugs.AST.Internals doPair
stare at its type
doPair :: Val -> (forall a. PairClass a => a -> b) -> Eval b
do you already grok why it can't be written as 14:55
doPair :: PairClass a => Val -> (a -> b) -> Eval b
?
gaal no, that's exactly what stumped me
i've vaglue seen something about the forall being more generic, but i can't see why 14:56
autrijus ok. the second way is like
doPair :: forall a. PairClass a => Val -> (a -> b) -> Eval b
s/like/actually/
gaal okay, so forall lets you quantify more tightly 14:57
but what difference does it make practically?
s/quanitify/specify the predicate, or limit the class/
lightstep that would allow you to pass as the second parameter a function of type (VPair -> Foo) 14:58
whereas in the first version, the second parameter is always a function that can accept anything in PairClass
autrijus right.
1) doPair :: Val -> (forall a. PairClass a => a -> b) -> Eval b
2) doPair :: forall a. PairClass a => Val -> (a -> b) -> Eval b 14:59
in 2, the function must handle every PairClass types
that's what the "forall a." in the outermost scope means
in 1, as long as your function can handle any one PairClass type, you're fine
i.e. as long as there exists _one_ PairClass type it can handle 15:00
iirc that's why it's called existential quantification
gaal hmmm
autrijus let's look at Emit.PIR vop1coerce 15:01
gaal why won't (VPair -> Foo) work?
autrijus oh, because sometimes you want to pass in (IPair -> Foo)
or some other thing in PairClass
gaal to take lightstep's example
no, i mean
why does the signature exclude that from working?
#2 15:02
autrijus you mean in 2.?
gaal yes
autrijus let's see
Prelude> :t negate
negate :: forall a. (Num a) => a -> a
hm, bad example
gaal hoogle :)
autrijus Prelude> :t subtract 15:03
subtract :: forall a. (Num a) => a -> a -> a
much better.
now consider 15:04
gaal this looks like it accepts any two (a :: Num)s, and returns... an (a::Num)
(duh)
autrijus foo :: (forall a. Num a) -> (forall a. Num a) -> (forall a. Num a)
gaal what's with the forall then?
autrijus in the subtract signature, all three a must agree
gaal oh, now they can be *different* Nums?
autrijus in the foo signature, none of them have to agree
yup
gaal right.
autrijus so it can be instantiated by Int->Double->Float 15:05
or something like that
gaal okay: but in the case of our original #1 and #2, what is there to agree? there';s only one arg quantified.
autrijus consider the type
foo :: forall a. Num a => (a -> Int) -> Int 15:06
gaal ok
autrijus and you call it with
bar :: Int -> Int
foo bar
it ought to fail
because foo should work on all Num types
not only Int
but bar only handles Int
so it can't unity 15:07
gaal aahh
autrijus unify
lightstep actually, you mixed it. foo bar (like this) would work
autrijus oh. hm?
lightstep if the forall was /inside/, it wouldn't work
autrijus oh. right.
autrijus professes sleepiness
lightstep: how about you carry on the explanation :)
lightstep ok
if you instantiate foo with a=Int, you can call foo bar 15:08
gaal okay.
lightstep quux :: (forall a. Num a => a) -> Int
you can't instantiate quux with a=something, since the forall isn't on the top level
gaal yes, okay. 15:09
hmm.
autrijus the error would be
Couldn't match the rigid variable `a' against `Int'
`a' is bound by the polymorphic type `forall a. (Num a) => a -> Int'
at <interactive>:1:0-7
lightstep: so I think you mixed it from the beginning too 15:10
gaal so when is such a signature useful? only when you give it a higer-order function? (*waves hands*)
lightstep autrijus, i don't know where you were getting at
autrijus #1 can't accept (VPair -> Foo)
gaal or is that just an example of a useless function?
autrijus whilst #2 could
lightstep: or am I still too confused?
lightstep that's correct 15:11
autrijus good, now we agree, let's move to the next step
gaal i'm in vop1coerce
autrijus ok 15:12
note that reg0 is used in two places
once as LValue and once as Expression
gaal vop1coerce :: SubName -> (forall a. RegClass a => a) -> Decl
autrijus (reg0 is the one with the polymorphic type)
gaal yes 15:13
autrijus in vop2x
(the one after it)
regr, reg0, reg1 are all used independently 15:14
gaal but twice in the body. hmm, this is a list - i read somewhere that you can get lists with seemingly differnt typed things usind these types
autrijus, independently == may have different actual types?
autrijus right. 15:15
as they often do
gaal and still make it into a list. okay.
autrijus so let's go back to your orig question
you'd like to unify two functions
which ones were they again?
somewhere in Prim? 15:16
gaal Prim.hs 573
autrijus op1IOBool
gaal the comment a few lines above that is your suggested code
my goals:
make the function (first argument) more parametric
autrijus right.
gaal not hardcode VBool
autrijus (forall a. Value a => Handle -> IO a)
and replace VBool with castV 15:17
gaal oh, that works because castV hides the magic
autrijus and in this case, since there's only one arg
gaal what could i do if i didn't have castV and wanted to pass VBool as an arg?
what's :t VBool again? 15:18
autrijus Bool -> Val
gaal oh, of course.
autrijus so something like
gaal (wanring: friends with beer and seashore intents approaching.)
autrijus op1IOCast :: (Handle -> IO a) -> (a -> Val) -> Val -> Eval Val
would do nicely
in that case then, there's no need to existentials
as the two "a" always unify
(as they should)
gaal right. 15:19
autrijus (since you are using the second to cast the first)
gaal yes, i see that
cool.
now, just a syntax querstion really
autrijus but if you are using castV on two different arguments
gaal how do i unify the two lines?
oh, with a lambda of course
autrijus which two lines?
gaal it's just a do-expression thing.
of the function body 15:20
i didn't like having to use <- fromval
wanted to pointfree this
autrijus well if you want to be pointless
fmap castV . liftIO . fun =<< fromVal v
you can even eliminate the v
or even the fun
gaal and val itself is
yeah
autrijus but that is left as an exercise to lambdabot 15:21
gaal "eta reducable", right? :-)
reducible even.
cool.
beer+beach!
autrijus enjoy :)
gaal thanks! :-) 15:22
autrijus oh well. turns out it does not have much to do with sexy types :)
(I thought you were going to pass something that reacts to all Value a types)
gaal waves & (honey, i'm a little tired for sexy types.. not tonight, okay?)
autrijus lol
enjoy!
gaal :) bye
autrijus (note to self: do not try to explain higher rank typing when sleepy) 15:23
whiteg autrijus: you should go to bed if you're sleepy. 15:29
svnbot6 r5339, autrijus++ | * export all overloaded Set operators.
autrijus whiteg: that is an excellent suggestion. 15:34
Limbic_Region autrijus - if you haven't gone to sleep yet 15:36
$larry just said some nice words about Pugs
perlmonks.org/index.pl?node_id=473689
oh - and the whole spaceship parsing bug(s) too - but that is important right now 15:37
autrijus well, seeing that it's important, I'll look at it 15:38
hm, why do you think it's -1?
I think it's clearly 0
because you're comparing two list references numerically
and arrayrefs numify to length
and indeed they are of same length
is it really a parsebug? 15:39
Limbic_Region wait a minute
maybe I forgot the infix +
Limbic_Region is absent minded sometimes
as that wasn't supposed to be list length compare
but infix sum
autrijus (Stoop) if you are abcedminded, to this claybook, what curious of signs (please stoop) in this allaphbed! 15:40
Limbic_Region ok - it is indeed my fault
autrijus oh. but still -- if it's parsed as derefing with '=' as hash
Limbic_Region though I think the bug is still there
let me fix the tests
autrijus pugs> :d %ball{10..12} <=> %ball{1..3}
App &infix:<=> (:
Syn "{}" {Var "%ball";
App &infix:.. (: 10, 12)},
Syn "{}" {Var "%ball";
App &infix:.. (: 1, 3)})
that looks entirely correct
same for the next line 15:41
Limbic_Region hang on 15:43
testing
ok 15:44
would you like me to nopaste
perlbot nopaste
perlbot Paste your code here and #<channel> will be able to view it: sial.org/pbot/<channel>
pasteling "Limbic_Region" at 24.35.57.240 pasted "Parsing spaceship possible bugs" (65 lines, 2.5K) at sial.org/pbot/11643 15:45
Limbic_Region is going to commit as he needs to go get breakfast 15:46
if they are bugs with my understanding - my apologies
autrijus commit first speak later :)
note that [+] is lower prec
being listop 15:47
so
[+] %ball{10..12} <=> [+] %ball{1..3}
is parsed as
[+] (%ball{10..12} <=> ([+] %ball{1..3}))
but that is as expected
and nothing related to spaceship per se
Limbic_Region so I think perhaps my bug isn't a bug if it is a precendence issue
autrijus nod. try putting parens around ([+] %ball{10..12}
)
and see if it works 15:48
Limbic_Region already have that
ok - committed
autrijus cool.
enjoy your breakfast
Limbic_Region think the issue was that there was a bug
but not the one I thought it was
and when you fixed it
I was thinking you hadn't
anyway - thanks - enjoy your sleep
autrijus np :) 15:49
svnbot6 r5340, Limbic_Region++ | Fixed parsing spaceship tests to correctly expose bug 15:51
r5341, autrijus++ | * unTODO a passing operator overloading test
autrijus gaal: I lifted op1IOBool into op1IO 15:58
enjoy
svnbot6 r5342, autrijus++ | * lift the IO respond type up in op1IOBool into a more generic op1IO.
autrijus rafl: do you have a test for Foo::Bar::baz? 16:20
svnbot6 r5343, autrijus++ | * turns out parsing_spaceship is actually a precedence issue;
r5343, autrijus++ | remove bogus tests.
autrijus Foo::Bar.baz, even 16:21
class Foo::Bar { method bar { 3 } }
say Foo::Bar.bar;
rafl: this worksforme, so I wonder what are you running into
rafl: I need to sleep now -- if you have a test already or commits one, please point it to me and i'll fix 16:22
autrijus waves g'nite &
rafl autrijus: OK, tomorrow. I'll need to prepare me for debconf now. 17:00
svnbot6 r5344, putter++ | Created docs/other/howto_unspam_the_pugs_wiki. Perhaps we should automate the spam detection. 17:15
nothingmuch hoi 17:35
putter hoi 17:36
putter backlogging <=> discussion, wonders if we should have a Mistakes/Puzzles/??? file and/or wiki page. Everytime you puzzle over something, add it to the file. As it grows, we can pull stuff out into an organized version. Because, modulo spec changes and pugs bugs, every issue we encounter will be encountered _many_ more times... 17:44
by _many_ more people...
colabti.de/irclogger/irclogger_log/...-07-09,Sat is timing out :( 17:45
nothingmuch putter: that's a good idae 17:48
putter Rules have a sigil of "<". rule foo {} binds <*foo. Can one access such a name? $x = <*foo; is a parserrror. 17:51
putter wonders if there is a spec'ed way to get the pattern string back out of a rule object... googling... 17:55
wolverian putter, a sigil <? where is that specced?
putter Implementation only? My impression is the rule logistics are only now beginning to be specced. 17:59
wolverian shrugs 18:00
I don't know what pugs does, I'm asking what it's supposed to do :)
putter The only thing I've seen is the hackathon's notes on &Mumble::rule:<foo>. 18:02
rule: seems to behave like prefix: 18:03
wolverian right, namespace separator of sorts. the <> there is just qw()
ie. not <foo
putter yes. 18:05
Ah, there it is, AST/Internals.hs typeOfSigil. In addition to the usual $@%@ there is also < Rule and : Type. 18:09
nothingmuch: it looks like nothingmuch.woobling.org/pugs_test_status/ hasn't been updated in a while? 18:17
gaal rehi 18:21
putter Yipes! The most recent smoke is July 5, and most of them are more than a month old. Five smokehouses, all unhelpful. :(
gaal everybody who lives close to a beach and doesn't go, should! 18:22
putter :)
gaal putter: perlcabal.org/~gaal
putter Are the forum2.org/gaal/ smokes abandoned now? 18:23
gaal uh, i guess :) 18:24
are they still listed somewhere? 18:25
putter Ok, then I'll remove them from pugs.kwiki.org/?SmokedPugs and add your new one. Ok?
gaal thanks
putter++ # global housekeeping
putter np. :) is it still a cygwin box? 18:27
gaal i don't think anyone's making a serious attempt at cygwin atm 18:28
i've moved to native win32
occasionally i also put up linux smokes, but less otfen as my win boxen are faster
putter ok, thanks 18:29
gaal if someone puts up a nice HOWTO for coLinux i might start using that :) 18:30
putter :) the absence of a linux smokehouse does seem odd. 18:32
gaal i wanted to automate a machine at work for it, but never got around to it.
doesn't juerd's setup on feather do it? 18:33
putter _really_ needs to get a colo box. RSN, for a multi-year value of soon.
re feather, can someone with a feather account report...? 18:34
gaal sec :-)
putter, want me to start a new smoke on my machine? regardless of feather
putter googling... feather.perl6.nl/~autrijus/smoke.html is late June... 18:35
theorbtwo Likely from the hackathon. 18:36
gaal juerd's autobuild does not smoke. shall i write him a letter? it's a two line patch to his setup.
putter ok, that's just weird: www.medhelp.org/perl6/dermatology/ warts, fungus, hives, etc. ;) 18:38
gaal nasty 18:39
wolverian what does that have to do with perl6?
gaal the url path. 18:40
wolverian I think that's what I meant :)
gaal :)
wolverian or rather, what does the page content have to do with the URI? :)
gaal obviously Dr. A. Rockoff is a subversive python hacker. 18:41
wolverian or he just uses pugs to run his website.
gaal yeah!
putter gaal: it would be good to have a linux smoke. either feather, juerd, or yours... 18:42
gaal sending juerd a patch as we speak.
putter gaal++
colabti.de/irclogger/irclogger_log/perl6 is back up. 18:45
Ah well, looks like symbol table lookup hasn't been implemented yet... 18:47
%*:: etc.
gaal there's a t/ for that
t/namespaces or something?
or t/syntax/symtable.t 18:48
putter yes, t/packages/reflection.t
gaal ooh fanct
i think there should be symtable.t also 18:49
i think i wrote it
putter and t/syntax/symbol_table.t
gaal that's the one
there's a t/pugsbugs/namespaces.t too 18:50
dudley quoth $larry: "Method calls are allowed to be argumentless"
gaal um, weren't they always? 18:51
dudley Yeah, but he's implying that plain subs aren't
or am I missing something?
theorbtwo I think he means $foo.bar; 18:52
With neither arguments nor a pair of empty parens.
dudley Ah, that would make more sense...
theorbtwo %CALLER:: has been implemented. 18:54
gaal to2, shall i abort my smoke and rebuild? 18:55
theorbtwo The code should be pretty general as to working with the other special namespaces.
nothing_pasta, I impemented it a month plus ago.
gaal i'm no pasta!
theorbtwo erxz_paste, whoops.
gaal my italian food does not burn.
theorbtwo grins.
putter ah! %CALLER::! 18:57
?eval my $x; my sub g(){}; sub h(){}; sub f() { say %CALLER:: } f()
evalbot6 Error: No compatible subroutine found: "&say"
putter ?eval my $x; my sub g(){}; sub h(){}; sub f() { %CALLER:: } f()
evalbot6 {('$?1' => \'my $x; my sub g(){}; sub h(){}; sub f() { %CALLER:: } f()'), ('$_' => \'perl6'), ('$code' => \'my $x; my sub g(){}; sub h(){}; sub f() { %CALLER:: } f()'), ('$lang' => \'Perl6'), ('$x' => \undef), ('%_' => {}), ('&?BLOCK_EXIT' => \sub {...}), ('&break' => \sub {...}), ('&continue' => \sub {...}), ('&g' => \sub {...})}
gaal wheeee
putter though there is no &h ? 18:58
gaal '$?1'?
theorbtwo Yeah, I sometimes don't understand everything that's there and not there either.
I think it's buggy, but I'm not sure it's well-specced.
gaal showers & 18:59
putter & thanks for the fish
putter , after an nth unsuccessful attempt to do a src/Pugs patch, wonders 19:04
(1) whether its better to focus on what is tractable rather than what is interesing... 19:05
(2) if it might be useful for someone with a good understanding of the state of src/Pugs to write up a "next steps" todo list...
(3) since autrijus is sooooo much more productive than me, whether there is some way to focus on supporting him, rather than banging randomly myself. Old IBM principle programmer with supporting team model. 19:07
end
gaal putter: when it does work, do you enjoy it? i find haskell very difficult, but at least as rewarding. 19:08
my contributions to src/Pugs are peripheral, but slowly increase. 19:09
i'm having fun. :)
what are you working on? 19:10
putter good questions... 19:11
I enjoy haskell, and fixing little things to get people unstuck. I've spent too much time lately working on rules, which had the unfortunate characteristics that there was no one working nearby (no fun), and I found myself in "for each few lines of code, a pugsbug" land (no fun). So I'm trying to get back to things that (1) someone else cares about, and (2) are tractable. 19:19
gaal at least the existence of t/ makes things much easier. 19:20
theorbtwo t++
gaal t++ sounds like a language that doesn't compile if you didn't write a test first. 19:21
theorbtwo It does at that.
Funky.
gaal i suppose one finds one's best balance point (and that point can move from time to time following circumstances) between the well-inhabited places and where there be dragons. 19:25
putter t/ is nice. though I miss the old "trade a test for a patch" days. 19:26
re balance point, oh yes. taste and judgement being key, as they are so often in programming. 19:27
t++ ... tea and crumpets? 19:30
Ah, a treaded archive of p6-l aspn.activestate.com/ASPN/Mail/Brow...6-language 19:40
gaal oops, forgot to upload smoke. fixing. 19:51
up now.
gaal had better get to bed now 19:53
bye :)
putter g'night gaal
I was talking to a haskell and perl person a few days ago... and he had never heard of pugs. I thought our visibility was pretty good, but perhaps more could/should? be done. 20:06
I was pondering what we might do to increase the probability that a lambdafolk visiting pugs gets sucked in as a contributor. 20:12
It seems we don't really have a "state of pugs" document occurring. autrijus's great journal tends to be "news", and thus a delta between states. but we dont seem to have anything which stops and sums up, "this is where we are at, what is working and not and how much. and this is what we are working on, where we are going and when". 20:16
It might be nice to have such a doc. Perhaps a monthly post or journal entry. 20:18
no?
dudley putter: as a fledging lambacamel, I think a doc like that would be great. 20:31
err, lambda
It would help me figure out what the hell is going on a lot faster 20:32
putter dudley: As you figure it out, it might be worth noteing what you found helpful. So when someone asks "I'm trying to figure out what the hell is going on", we can at least drop your list. With an additional level of detail, eg, lib/pugs/hack.pod helped with foo but not bar, it could help guide documentation. 20:49
putter notes that by grepping around, one can easily establish that nothing like the sentence "Pugs has two regular expression engines, PCRE and PGE." exists. ;) 20:51
dudley putter: that's a good idea. That would probably help me organize my thoughts a little, too. 20:59
putter :) 21:04
svnbot6 r5345, putter++ | Added a note about haddock to docs/SEEALSO. It wasnt mentioned anywhere.
wilx What am I supposed to put into PARROT_PATH? 21:08
When I set it to /opt/ I get "Can't exec "./parrot": No such file or directory at Makefile.PL line 404."
And when I set it to /opt/bin or /opt/bin/parrot I get "*** Please set $ENV{PARROT_PATH} to the base path with a built parrot tree." 21:09
I have installed parrot-0.2.2 with --prefix=/opt.
dudley Try the path to the build directory, not the install directory 21:10
I've never tried it with an installed parrot...
wilx Ah.
Yup, this looks like it works. 21:12
dudley Cool
putter Could someone remind me how to make test with -BPIR? (yes, I was the one who figured it out. yes, I failed to add it to the documentation) 21:22
sigh.
dudley what does make pirsmoke do?
putter ah, and right next to pirsmoke, pirtest. thanks dudley. pirsmoke generates a smoke using the PIR backend. 21:23
dudley That's what I thought. Didn't know about pirtest, though. 21:24
putter And... neither are documented. Nor the setting up of a perl embedded pugs. 21:27
Hmm, so one cannot embed both parrot and perl5 at the same time? 21:35
dudley Sure, why not? 21:37
Juerd gaal: autobuild smoking would mean it'd have to run less often
gaal: As a smoke takes a long time to finish.
putter Juerd: could you have a copy on the side and smoke it once a day or so? 21:44
dudley: I was confused. 21:45
Juerd: the motivating observation is that noone is running a linux smoke any more.
dudley happens to the best of us ;-)
Juerd putter: I don't quite understand why people who have access to feather don't just have it smoke. 21:46
The files are readable, they can be used.
putter dudley: By practicing assiduously, I now excel at it. 21:47
Juerd In any case, smoking shouldn't take place in the script that is executed once every 15 minutes, as I never want the script running twice. (I should add a check for that, btw)
putter ~~ <people who have access to feather> #=> bool::false 21:48
Juerd: good, it sounds like you have a sound vision... care to implement it? ;-) 21:51
anyone with access to feather here? 21:52
putter hopes the rpms for 6.4.1 will not have merely a stage-1 compiler. There is no reason ghc shouldnt be made _trivial_ to install. 21:55
yasar_ #fazlamesai Turkish Linux Team #fazlamesai Turkish Linux Team #fazlamesai Turkish Linux Team #fazlamesai Turkish Linux Team #fazlamesai Turkish Linux Team #fazlamesai Turkish Linux Team #fazlamesai Turkish Linux Team #fazlamesai Turkish Linux Team 22:01
putter Hmm... Where might one note that the redefinition of RETURN (p5 vs readline), when embedding perl5, is not a problem and can be ignored. I'm reluctant to clutter up README... 22:03
oops, dinner, & 22:06
dudley putter: maybe we need a new doc for notes on building pugs. The various make options (pirsmoke, pirtest) could get documented there, too. 22:33
masak dudley: sounds like a good idea 22:36
dudley any metacommitters around? 22:41
autrijus dudley: yes? 23:19
greetings joao 23:41
joao: are you fluent in both Haskell and Perl? 23:42
joao Nopes, sorry :)
Just a beginner 23:43
autrijus to both? excellent.
joao Well, I have some background in Haskell programming and basic knowledge about Perl
I'm trying to improve both, actually
autrijus I think you automatically qualify for a committer bit to Pugs :)
so what was the question you asked cog to ask me again? I lost the /msg window with cog 23:44
joao he asked you something about your sabatic? what was your job? something like that.. 23:45
autrijus oh. I own a small shell company that does free software consulting etc
by sabbatical I meant living mostly on my bank savings and dedicate most of my time to pugs 23:46
joao nice :)
dudley autrijus: Is it possible to change my username on openfoundry? 23:50
autrijus dudley: what's your username?
dudley I signed up as dkf 23:51
autrijus dudley: it would be simplest to just register a new name.
dudley (lack of sleep :-) _
autrijus and let me or other metacommitter know the name so you can be added to committer list again
joao Perl6 User's Golfing System? :)
23:52 Maddingue__ is now known as Maddingue
autrijus joao: yeah. golfing is part of perl culture :) 23:53
"A competition to find the shortest (fewest keystrokes) Perl code to solve a given problem."
Khisanth wouldn't golf driven design lead to something looking like brainfuck? :) 23:54
autrijus Khisanth: aha, the golfers aren't the designers, that's key
joao autrijus: cog presentation in Toronto was about golfing too, i think 23:56
autrijus: btw, are you coming to YAPC::EU ?
autrijus joao: I wish I could but I need to make to ICFP+EuroOSCON too, and that has already depleted my travel budget 23:57
geoffb autrijus, I take it you're skipping OSCON Portland?
joao Oh, too bad. You could meet this place.. :)
autrijus geoffb: aye 23:58
geoffb :-(
First time I'm managing to make a conference in I think 6 years