Experimental IRC log haskell-2007-06-10

Available formats: content-negotiated html turtle (see SIOC for the vocabulary)

Back to channel and daily index: content-negotiated html turtle

These logs are provided as an experiment in indexing discussions using IRCHub.py, Irc2RDF.hs, and SIOC.

00:00:13<ddarius>@google site:haskell.org Oleg
00:00:16<lambdabot>http://www.haskell.org/pipermail/haskell/2004-June/014109.html
00:00:16<SamB_XP>... which seems to be the case still
00:00:16<lambdabot>Title: [Haskell] Re: how to write a list builder? fixpoint?
00:01:01<SamB_XP>http://www.google.com/search?q=site:haskell.org/haskellwiki
00:01:02<lambdabot>Title: site:haskell.org/haskellwiki - Google Search
00:03:12<ddarius>Good call
00:05:16<SamB_XP>but at least now it the webmaster tools say that robots.txt allows it to index the wiki
00:05:50<SamB_XP>hopefully the crawler will recrawl the wikipages a bit sooner than they'll look at the homepage ;-)
00:06:26<SamB_XP>apparantly they last crawled http://www.haskell.org/ in july 2006...
00:06:27<lambdabot>Title: Haskell - HaskellWiki
00:10:06<whitenoyce>variables are a misnomer in haskell
00:10:06<whitenoyce><- noob
00:10:41<SamB_XP>whitenoyce: no more than in math
00:11:20<whitenoyce>but why would a constant be called a variable if it does not vary?
00:11:36<ddarius>Because it varies with the environment
00:11:48<SamB_XP>C-- calls those things you are thinking of "registers" instead of "variables"
00:11:51<SamB_XP>iirc
00:12:18<SamB_XP>makes more sense, anyways.
00:12:40<Cale>whitenoyce: for example in (\x -> x + 5), x is a variable, even though whenever the lambda is actually applied, it remains constant through that application
00:13:07<Cale>(what the lambda gets applied to is really what varies)
00:13:44<byorgey>whitenoyce: your computer finished upgrading? =)
00:17:02<SamB_XP>why does yahoo's search results look so much like google's (in style, not content)...
00:17:13<whitenoyce>byorgey, yes
00:17:28<whitenoyce>E: Sub-process /usr/bin/dpkg returned an error code (1)
00:17:29<whitenoyce>but ghci works
00:17:46<whitenoyce>i like yahoo's search
00:17:47<byorgey>whitenoyce: yah, I might expect some sort of glitch
00:17:56<whitenoyce>live.com is pretty good too
00:18:13<byorgey>whitenoyce: you should probably try running dist-upgrade again, and keep running it until it doesn't do anything
00:18:27<byorgey>whitenoyce: or at least until it keeps returning the same error
00:19:42<whitenoyce>yeah, its on a couple of unimportant packages
00:19:47<whitenoyce>i'll just ignore it
00:20:07<whitenoyce>or edit /var/lib/dpkg/status
00:21:37<whitenoyce>ACTION whitenoyce pokes at haskell and gets surprises
00:21:42<Philippa>whitenoyce: they're variables in exactly the same sense as variables in algebra
00:21:49<whitenoyce>let n=[1,2,3]
00:21:57<Philippa>the imperative use of the word is the deviant
00:21:57<whitenoyce>let n=0:n
00:21:59<whitenoyce>uh, oh
00:22:10<syntax>Malbolge rules'em all.
00:22:14<SamB_XP>why does everyone use the same syntax for site search now?
00:22:28<byorgey>> let n = 0:n in n
00:22:29<lambdabot> [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0...
00:22:40<byorgey>perfectly valid Haskell =)
00:22:46<sorear>SamB_XP: To spite the guy who invented printf-format multisearch customization (in firefox eg)
00:22:49<sorear>ACTION is guessing
00:23:00<SamB_XP>heh
00:23:10<whitenoyce>well its not identical
00:23:18<whitenoyce>p= for yahoo
00:23:23<igli>nice idea tho sorear ;)
00:23:24<whitenoyce>results.aspx for msn
00:23:31<Philippa>whitenoyce: that made sense re variables?
00:23:32<whitenoyce>n= for yahoo
00:23:37<whitenoyce>a cookie for msn results
00:23:39<SamB_XP>whitenoyce: within the variable
00:23:44<whitenoyce>num= for google
00:23:53<whitenoyce>yeah i got the variable thing
00:24:00<byorgey>whitenoyce: ok, ok... =)
00:24:11<SamB_XP>all of them use the site:haskell.org/haskellwiki syntax
00:24:22<whitenoyce>SamB, oh that
00:24:26<whitenoyce>msn doesn't
00:24:27<syntax>sorear: "madness" is feminine. you should say "mucha madness".
00:24:30<whitenoyce>yahoo not really
00:24:36<whitenoyce>siteexplore.yahoo.com
00:24:39<SamB_XP>whitenoyce: live search does
00:24:50<whitenoyce>SamB, they must've fixed it
00:24:58<whitenoyce>they keep breaking it
00:25:00<SamB_XP>and yahoo said it was redirecting my site: search to site explorer
00:31:48<SamB_XP>unfortunately, not only do they all seem to use the same site: syntax, none of them seem to have any content from haskellwiki
00:33:13<SamB_XP>huh. exalead has
00:33:25<SamB_XP>(I learned of them through my own HTTP logs ;-)
00:33:26<int-e>SamB_XP: that's a known problem - see http://haskell.org/robots.txt ...
00:33:43<SamB_XP>int-e: I got Igloo to append a ? this morning, though
00:34:53<SamB_XP>google has the new robots.txt, both for www.haskell.org and for haskell.org
00:35:10<int-e>I see. hmm.
00:35:20<SamB_XP>but they don't seem to have crawled any wiki pages yet. I'm obviously being too impatient.
00:35:39<SamB_XP>now if only I'd checked exalead before Igloo changed robots.txt, or shortly afterwards...
00:36:13<syntaxfull>how much of the search market has google by now?
00:38:07<int-e>@google inurl:Haskell_in_5_steps
00:38:09<lambdabot>http://www.haskell.org/haskellwiki/Haskell_in_5_steps
00:38:09<lambdabot>Title: Haskell in 5 steps - HaskellWiki
00:39:19<int-e>(but google has no contents for that page. the search finds a proxy though, funny)
00:40:54<SamB_XP>hmm. I think exalead just doesn't throw stuff out when you restrict access using robots.txt
00:41:52<SamB_XP>and they seem to have indexed a couple of pages since Igloo changed robots.txt
00:42:58<syntaxfull>@google google
00:42:59<lambdabot>http://www.google.com/
00:42:59<lambdabot>Title: Google
00:43:12<SyntaxNinja>y0
00:43:19<syntaxfull>x0
00:43:39<SamB_XP>@google exabot
00:43:43<lambdabot>http://www.exalead.com/
00:43:43<lambdabot>Title: Exalead - Internet search engine, image search engine, video search engine ...
00:44:17<syntaxfull>one can't compose @ commands with > haskell results. that is sucky.
00:44:23<syntaxfull>@eval 2+2
00:44:33<kpreid>@. show run 2+2
00:44:34<lambdabot>" 4\n"
00:44:38<syntaxfull>run?
00:44:40<SamB_XP>no wait, exalead hasn't updated any of their index data...
00:44:54<SamB_XP>well. maybe they have.
00:44:54<syntaxfull>@. google run fix ("google":)
00:44:56<lambdabot>http://video.google.com/
00:44:57<lambdabot>Title: Google Video
00:44:59<SamB_XP>but I was misreading the dates...
00:45:34<kpreid>@. google . read . run replicate 10 y
00:45:35<lambdabot>Plugin `compose' failed with: IRCRaised Parse error: "replicate"
00:46:17<syntaxfull>@read 2+2
00:46:17<lambdabot>Plugin `dummy' failed with: IRCRaised Prelude.read: no parse
00:46:22<syntaxfull>@show 2+2
00:46:22<lambdabot>"2+2"
00:46:45<SamB_XP>heh
00:46:49<syntaxfull>@. google . run replicae 10 y
00:46:50<lambdabot>Plugin `compose' failed with: IRCRaised Parse error: "replicae"
00:46:56<syntaxfull>@. google . run replicate 10 y
00:46:56<lambdabot>Plugin `compose' failed with: IRCRaised Parse error: "replicate"
00:47:05<syntaxfull>@help run
00:47:05<lambdabot>run <expr>. You have Haskell, 3 seconds and no IO. Go nuts!
00:47:10<kpreid>@. google . read run replicate 10 y
00:47:10<lambdabot>Plugin `compose' failed with: IRCRaised Prelude.read: no parse
00:47:18<syntaxfull>@help read
00:47:18<lambdabot>read "<foo>". Print <foo>
00:47:20<kpreid>@. google run replicate 10 y
00:47:22<lambdabot>http://blogs.msdn.com/wesdyer/archive/2006/12/26/reading-and-writing-queries.aspx
00:47:22<lambdabot>Title: Yet Another Language Geek : Reading and Writing Queries
00:47:28<kpreid>there we go
00:47:56<syntaxfull>@run replicate 10 y
00:47:57<lambdabot> Not in scope: `y'
00:48:09<syntaxfull>@show . run replicate 10 y
00:48:09<lambdabot>". run replicate 10 y"
00:48:17<kpreid>er, oops
00:48:20<syntaxfull>@. show run replicate 10 y
00:48:21<lambdabot>" Not in scope: `y'\n"
00:48:25<kpreid>@. google run replicate 10 "y"
00:48:27<lambdabot>http://en.wikipedia.org/wiki/Y
00:48:28<lambdabot>Title: Y - Wikipedia, the free encyclopedia
00:48:31<SamB_XP>isn't this preview the best: http://www.exalead.com/search/results?q=hugs+mode+for+emacs&x=0&y=0
00:48:35<lambdabot>Title: hugs mode for emacs - Exalead Search, http://tinyurl.com/yns2ry
00:49:09<SamB_XP>the top thumnail on the left
00:49:27<syntaxfull>@. quote quote
00:49:27<lambdabot>No quotes match. The more you drive -- the dumber you get.
00:49:35<syntaxfull>@quote
00:49:35<lambdabot>SeanRussell says: [On the wmii (window manager) mailing list] Hah! That's a laugh. Since when does "it compiles" equate to "it will run (correctly)"? We're talking about C, after all... not
00:49:35<lambdabot>Haskell.
00:49:47<SamB_XP>@quote
00:49:47<lambdabot>The says: alien rulers of the galaxy must surely use a statically typed language with type inference
00:49:54<SamB_XP>@quote
00:49:54<lambdabot>malig says: I have to admit I'm still stunned when "tying the knot" actually works. it's like I just performed the kind of magic that normally requires a lot more goat's blood
00:50:14<syntaxfull>@quote magic
00:50:14<lambdabot>malig says: I have to admit I'm still stunned when "tying the knot" actually works. it's like I just performed the kind of magic that normally requires a lot more goat's blood
00:50:19<syntaxfull>?quote magic
00:50:19<lambdabot>ghc says: magic number mismatch: old/corrupt interface file?
00:51:03<syntaxfull>?. quote . google . show run chr(181)
00:51:06<lambdabot>No quotes for this person. You speak an infinite deal of nothing
00:51:10<syntaxfull>?. quote . google . show run chr(65)
00:51:14<lambdabot>No quotes for this person. Are you on drugs?
00:51:21<int-e>@quote state
00:51:22<lambdabot>state says: ?. ++ . read . show . state ?. ++ . read . show . state
00:51:55<syntaxfull>@quote drugs
00:51:56<lambdabot>LoganCapaldo says: <LoganCapaldo> @src fixIO <lambdabot> Source not found. Are you on drugs? <LoganCapaldo> No <LoganCapaldo> Meanie
00:52:02<syntaxfull>@quote drugs
00:52:02<lambdabot>dylan says: pugs, darcs, and lambdabot: gateway drugs to haskell.
00:52:13<syntaxfull>@quote drugs
00:52:13<lambdabot>LoganCapaldo says: <LoganCapaldo> @src fixIO <lambdabot> Source not found. Are you on drugs? <LoganCapaldo> No <LoganCapaldo> Meanie
00:52:49<syntaxfull>@quote mean
00:52:50<lambdabot>edwinb says: I've just walked past a poster advertising a gig by a band called "The Awkward Squad". I assume this means they provide output, play concurrently, and people take exception to them.
00:54:15<syntaxfull>@quote grep
00:54:15<lambdabot>Kahdloc says: why's it called filter and not grep? :/
00:54:30<syntaxfull>OH. that's a protontorpedoism if I ever saw one.
00:56:16<sorear>@seen dons
00:56:16<lambdabot>dons is in #xmonad, #haskell-soc and #haskell. I last heard dons speak 10h 38m 7s ago.
00:57:14<syntaxfull>wth is haskell-soc?
00:57:22<chessguy>soc=summer of code
00:57:25<chessguy>@where soc
00:57:25<lambdabot>http://hackage.haskell.org/trac/summer-of-code/
01:06:09<SyntaxNinja>our channel about socks. socks are very important in haskell.
01:06:20<SyntaxNinja>syntaxfull: are you the same as syntaxfree?
01:07:13<sorear>SyntaxNinja: he has the same userinfo, Diego Navarro
01:07:44<syntaxfull>21:24 < syntax> sorear: "madness" is feminine. you should say "mucha madness".
01:07:53<syntaxfull>21:24 -!- You're now known as syntaxfull
01:08:12<chessguy>@seen syntaxfree
01:08:12<lambdabot>I haven't seen syntaxfree.
01:08:30<SyntaxNinja>whew
01:08:38<chessguy>@seen syntaxfull
01:08:38<lambdabot>syntaxfull has changed nick to syntaxfree.
01:08:38<lambdabot>syntaxfree is in #haskell-blah and #haskell. I last heard syntaxfree speak 45s ago.
01:08:39<sorear>@seen Syntaxfull
01:08:39<lambdabot>Syntaxfull has changed nick to syntaxfree.
01:08:39<lambdabot>syntaxfree is in #haskell-blah and #haskell. I last heard syntaxfree speak 45s ago.
01:08:43<SyntaxNinja>I was afraid there was yet another syntax-something
01:08:45<syntaxfree>22:08 -NickServ(NickServ@services.)- Password accepted - you are now recognized
01:08:48<chessguy>@quote stereo
01:08:48<lambdabot>Cale says: Welcome to #haskell where your questions are answered in majestic stereo!
01:08:49<syntaxfree>heh.
01:09:04<chessguy>not only answered in stereo, but asked, too!
01:12:48<chessguy>well, that was a conversation-killer
01:13:11<chessguy>or did i get booted again?
01:13:27<syntaxfree>conversations are not living entities.
01:13:31<syntaxfree>they cannot be killed.
01:13:41<sorear>syntaxfree: you ruined it
01:14:34<chessguy>syntaxfree, prove it
01:27:16<rabbitear>lots
01:28:39<sorear>straws
01:29:11<rabbitear>nuns
01:39:49<sorear>@tell kosmikus lhs2TeX doesn't typeset strict fields very well (probably unfixable)
01:39:49<lambdabot>Consider it noted.
01:44:47<rabbitear>tab made
01:45:34<sorear>?
01:47:26<dancor>can i get the directory my program is executing in
01:47:48<dancor>i mean the path of the executable
01:47:59<dancor>as opposed to the $PWD
01:48:07<sorear>no
01:48:21<sorear>well you *can*, but it requires very deep hackery
01:48:30<rabbitear>strace?
01:48:35<sorear>deeper
01:48:45<rabbitear>deeper then strace?
01:48:49<rabbitear>read the code!
01:49:02<sorear>rabbitear: As in, using undocumented kernel features
01:49:10<SamB_XP>sorear: strace doesn't do that?
01:49:11<rabbitear>ohhh.
01:49:19<SamB_XP>which ondocumented features?
01:49:20<sorear>strace is at least documented, and uses ptrace which is also
01:49:25<sorear>you'll need to readlink /proc/self/exe
01:49:29<SamB_XP>... does linux have a ticket tracker?
01:49:43<sorear>SamB_XP: the documentation for things under /proc is woefully lacking
01:49:44<SamB_XP>sorear: how is that undocumented
01:49:57<SamB_XP>well, I mean, ls -l isn't documentation ?
01:49:58<rabbitear>I don't know 'this app'
01:50:04<rabbitear>to say. that..
01:50:07<sorear>SamB_XP: afaict man 4 proc hasn't been updated since before 2.0.x
01:50:43<SamB_XP>sorear: and ls -l doesn't count as documentation?
01:50:45<sorear>SamB_XP: by that logic the source code must count too
01:51:02<SamB_XP>sorear: well, nearly
01:51:03<rabbitear>must count..
01:51:27<rabbitear>you should be able to see where a file is being 'got' from the source
01:51:44<sorear>dancor: But if you're trying to access the directory of an exec, you are doing something very very un-unixlike
01:52:09<rabbitear>sorear: what is this app?
01:52:31<sorear>dancor: distributed programs are strongly encouraged to follow the Filesystem Hierarchy Standard, which says that your progam is in /usr/bin and none of your data files are there
01:52:36<sorear>rabbitear: no clue, ask dancor
01:52:48<sorear>rabbitear: oh, Linux
01:52:53<sorear>linux proper that is
01:53:00<rabbitear>sorear: the kernel itself?
01:53:02<sorear>yes
01:53:06<rabbitear>sorear: oh..
01:53:32<rabbitear>sorear: I can't go there..
01:53:56<sorear>rabbitear: Linux proper::has undocumented features No clue, ask dancor::can i get the path of the executable?
01:54:01<sorear>rabbitear: clarifies?
01:54:08<SamB_XP>sorear: maybe he wants to know what prefix it is installed in
01:54:16<SamB_XP>i.e. /usr vs. /usr/local
01:54:39<rabbitear>I really don't know the topic here.
01:54:43<sorear>dancor: if what SamB_XP says is true, @PREFIX@
01:55:38<dancor>i'm reading the FHS. thanks
01:57:51<rabbitear>dancor: good idea
02:02:04<dancor>i have an executable and a bunch of png files. i have no immediate vision for how this would install onto /. but right now i have the executable progName in ~/p/progName and the images in ~/p/progName/data. i just want to be able to run the program as ~/p/progName/progName. what is the correct thing to do, link the binary to ~/bin (or ~/usr/bin) and the data dir to ~/lib/share/progName and the program has to guess if it should loo
02:03:45<kpreid>images would go in PREFIX/share/progName/
02:03:53<kpreid>executable in PREFIX/bin/
02:05:00<dancor>right ok. and how do you access PREFIX in the .hs?
02:05:27<sorear>dancor: you got cut off sat "it should look"
02:07:46<dancor>and so even when you guys are testing programs you have this structure in place (and PREFIX is like . or ~) ?
02:09:17<kpreid>dancor: at compile/installation time you wire the prefix into the executable
02:09:43<kpreid>it could be just a shell script which execs the real program and passes the prefix in environment or args
02:10:24<rabbitear>dancor: if its not for you re-read FHS
02:10:45<rabbitear>dancor: other wise, its not an issue
02:10:54<gwern>so, I'm trying to figure out how to take some text and return a list of all the URLs in it, and I check out Text.HTML and I see 'address :: Html -> Html' in <http://www.haskell.org/ghc/docs/latest/html/libraries/html/Text-Html.html>, but this doesn't help me at all. where do I find the real documentation which actually describes what it does?
02:10:54<lambdabot>http://www.haskell.org/ghc/docs/latest/html/libraries/html/Text-Html.html>
02:10:55<dancor>is it possible to specify PREFIX and PROGNAME (?) in the .hs file to be filled in at compile time
02:12:10<ddarius>It certainly is possible in a variety of ways.
02:12:23<rabbitear>yeppers
02:12:34<rabbitear>FHS would have people not complain
02:13:00<dancor>ddarius: but would i have to do something myself (sed 's/@PREFIX@/../g')
02:13:36<ddarius>dancor: That's one possibility, or you can use CPP, or you can import a module that gets made, or you can use TH, or you can do a variety of other things.
02:14:37<SamB_XP>how do you have Cabal tell you where your files will be?
02:14:48<dancor>well which one is the most unixlike since what i wanted to do, in this world of possibilty, apparently wasn't :)
02:14:56<SamB_XP>also, it occurs to me that Cabal should support games ;-)
02:15:11<ddarius>SamB_XP: ?
02:15:29<SamB_XP>ddarius: games go in different places from ordinary programs
02:15:51<ddarius>And Cabal doesn't support that?
02:17:56<dancor>i guess i'm confused how i can take the --prefix you give to ghc or cabal and replace strings in my source
02:18:12<ddarius>The most unixy way would probably be to have an environment variable and/or commandline option to specify the directories.
02:18:21<sorear>I had momentarily forgotten about Cabal.
02:18:33<SamB_XP>well, game binaries go in /usr/games, data goes in /usr/share/games, highscores go in /var/games
02:18:42<ddarius>sorear is getting senile in his old age
02:18:58<sorear>Autoconf works by substituting information like the prefix for special tokens such as @PREFIX@ for the prefix, in a list of files.
02:19:11<sorear>In cabal, you use a Paths_ module, *finds url*
02:20:12<sorear>http://www.haskell.org/ghc/docs/latest/html/Cabal/authors.html#paths-module
02:20:14<lambdabot>Title: 2. Creating a package, http://tinyurl.com/yv8xjt
02:20:21<SamB_XP>ddarius: he has old age remarkably early!
02:20:41<sorear>that is either out of date or deliberately vague; it does not document most of the Paths_ functions
02:22:32<hpaste> sorear pasted "sample Paths_ module" at http://hpaste.org/235
02:23:17<gwern>ACTION whacks Text.Html out of frustration. I just wanted to parse some URLs out of some text! why is that so hard? :(
02:23:39<sorear>because Text.Html is a pretty printer
02:23:45<sorear>I think you wanted a parser
02:23:49<gwern>oh
02:23:56<SamB_XP>lol
02:23:58<gwern>ACTION feels foolish now
02:24:17<gwern>that would explain why feeding 'address' a html document was not producing useful results.
02:24:25<SamB_XP>ACTION smiles at relaxed "lol" policies
02:24:47<Korollary>but, do you smile out loud?
02:25:05<SamB_XP>Korollary: of course not
02:25:13<SamB_XP>my face isn't broken, you know!
02:25:50<sorear>@where tagsoup
02:25:50<lambdabot>http://www-users.cs.york.ac.uk/~ndm/tagsoup/
02:26:05<sorear>gwern: ^^^ ndm's pathetic attempt at parsing html
02:26:10<gwern>sorear: actually, I'm looking at the tagsoup manual now
02:26:18<sorear>:)
02:26:41<gwern>seemed like the only one on the wiki's list even remotely near my need :(
02:26:49<gwern>and speaking of the wiki, why is the #1 hit for 'haskell wiki' the *old closed* wiki?
02:27:05<sorear>gwern: because google is banned from indexing the new one
02:27:33<sorear>or rather "was", but the problem was fixed an hour or so ago, no time to reindex
02:27:40<gwern>oh. the stupid robots.txt issue again?
02:27:42<sorear>yeah
02:27:49<SamB_XP>sorear: we updated robots.txt probably 12 hours ago
02:28:04<gwern>(sheesh, I mean you could just copy wikipedia's robot.txt if it's really that hard to write a good one)
02:28:06<SamB_XP>google.com read the new robots.txt sometime after 4:00 PDT
02:28:52<sorear>gwern: but our urls are different and Igloo refuses to shorten them
02:29:02<sorear>07:31 < Igloo> That would break every external link for little gain
02:29:24<sorear>'refuses' in an exaggerated sense
02:29:29<SamB_XP>Igloo also said it was an issue for the wiki administrator...
02:29:38<gwern>so do a search/replace then
02:29:58<SamB_XP>gwern: you are going to go and do a search/replace on our irc logs?
02:30:04<SamB_XP>that we don't manage?
02:30:47<sorear>@seen nef
02:30:47<lambdabot>I haven't seen nef.
02:30:50<SamB_XP>heh
02:30:57<gwern>SamB_XP: 'twas referring to searh/replace the different links in robots.txt
02:31:01<SamB_XP>I don't think I've ever seen nef
02:31:10<SamB_XP>it's possible that I saw nef in #tunes, I dunno
02:31:12<Saizan>just moving the scripts pages won't hurt references
02:31:21<SamB_XP>Saizan: yeah.
02:31:54<SamB_XP>but anyway I realized that if we stick a ? in the excluded path, it will only exclude scripty usage
02:32:17<SamB_XP>see robots.txt ;-)
02:32:49<Saizan>i was reading when you suggested this :)
02:33:19<sorear>@seen hcr
02:33:20<lambdabot>I haven't seen hcr.
02:33:20<sorear>@seen hcf
02:33:21<lambdabot>I haven't seen hcf.
02:33:36<SamB_XP>> 29/30
02:33:40<lambdabot> 0.9666666666666667
02:34:03<SamB_XP>... my mom was bugging me to calculate that...
02:37:31<SamB_XP>huh, google didn't trademark SafeSearch ?
02:38:27<SamB_XP>huh. search.live.com knows and uses the fact that I'm in Upper Darby?
02:38:37<SamB_XP>I guess it isn't that hard to find from my IP address...
02:41:22<SamB_XP>huh. for some reason when I clicked on "for site owners" at the bottom of my Live search results, the first thing on the list was about Daylight Savings Time issues, and apparantly to fix them I need to finally install SP2 :-(
02:41:31<SamB_XP>ACTION lacks the harddrive space to do this
02:44:50<dancor>dist/build/autogen/Paths_Ta.hs:7:7:
02:44:50<dancor> Could not find module `Data.Version':
02:44:51<dancor> it is a member of package base, which is hidden
02:45:27<chessguy>dancor, what do you get from ghc-pkg list
02:45:38<SamB_XP>I'm guessing it is a GHC bug
02:45:44<SamB_XP>what GHC version?
02:45:52<dancor>6.6
02:46:08<SamB>no, wait.
02:46:11<dancor>chessguy: there is a lot of pkgs, what am i looking for
02:46:14<SamB>why is base hidden?
02:46:19<SamB_XP>ACTION silly
02:46:27<chessguy>danuh...Data.Version?
02:46:40<chessguy>err, dancor
02:46:51<SamB_XP>dancor: oh, maybe you need to say that your package uses base?
02:47:52<dancor>SamB_XP: yes of course.. thanks
02:48:22<SamB_XP>it seems kind of silly that it is necessary to specify that you need base ;-)
02:49:15<sorear>not at all, base doesn't use base
02:50:24<SamB_XP>Windows 98 requires *5* reboots to install? wow!
02:51:23<sorear>Debian requires 0. /me feels superior
02:51:45<SamB_XP>*0*?
02:51:52<SamB_XP>I thought it required 1.
02:52:09<sorear>it's *encouraged*, but there is an option to skip it
02:52:20<SamB_XP>first boot: install stuff to harddrive (including, say, the kernel)
02:52:41<SamB_XP>second boot: okay! (install anything else you missed the first time)
02:52:59<sorear>Turn on, boot from CD (which has a perfectly good kernel), install stuff,
02:53:11<SamB_XP>third boot: oops! I need to do this and that with /etc/init.d before the system gets back to proper working order...
02:53:19<sorear>EITHER: reboot, load kernel from hdd, install everything else
02:53:40<sorear>OR: chroot and exec the second phase install scripts while still running off CD
02:53:52<SamB_XP>can you keep it running like that indefinately?
02:53:55<SamB_XP>is it a good idea>?
02:53:59<sorear>Yes, and No.
02:54:09<SamB_XP>so, I still say that's one reboot.
02:54:31<SamB_XP>no reboots would be if you didn't *need* to boot before installing
02:55:10<igli>oh where's all the lovely code gone? *groan*
02:55:21<igli>@botsnack
02:55:21<lambdabot>:)
02:55:57<sorear>arke, erousseau, tozefs, dureyes, NDP-Kubuntu, NDPTAL85, NDPMacBook, hb2
02:56:01<sorear>s/hb2/gb2/
02:56:19<sorear>those are the freenode users coming from ~nef's ISP
02:56:38<sorear>something tells me the NDP* are bots
02:56:47<igli>@src fix
02:56:47<lambdabot>fix f = let x = f x in x
02:57:08<SamB_XP>well, okay, so maybe that takes care of the logs in ~nef
02:57:12<SamB_XP>what about the ones on meme?
02:57:23<sorear>he's much less anonymous
02:57:31<SamB_XP>hmm?
02:57:31<shapr>ACTION points at cmeme
02:57:33<igli>@src type
02:57:33<lambdabot>Source not found. It can only be attributed to human error.
02:57:46<rabbitear>thats good
02:57:52<sorear> * Logs are available at ~nef/logs/tunes/, WWW-browsable at Kevin Rosenberg's Meme Log Interface.
02:57:52<SamB_XP>so how do the ~nef logs get from clog to ~nef anyway?
02:57:54<igli>you're absolutely right lambdabot :)
02:58:05<sorear>SamB_XP: ~nef has the same IP as clog
02:58:11<igli>hehe
02:58:28<SamB_XP>sorear: you didn't mention clog as one of the irc users from ~nef's IP...
02:58:44<sorear>yea, I filtered him out as a definite-bot :)
02:58:53<rabbitear>I'm sure all you irc users are okay
02:59:10<sorear>unfortunately ~nef (hcf) has a VERY dynamic IP, seen changing multiple times in an hour
02:59:36<sorear>the 9 users are from the class B subnet registered to the RCN corporation
02:59:47<igli>rabbitear: you are a mathematician no?
02:59:50<SamB_XP>sorear: wow
02:59:57<rabbitear>igli: no
02:59:59<SamB_XP>mine doesn't change nearly that often
02:59:59<sorear>?
03:00:17<sorear>i'm also googlestalking based on 7 year old logs :)
03:00:23<rabbitear>what I say here is not necessary what I'm saying here
03:00:39<rabbitear>isn't much, I have a purpose here...
03:00:41<SamB_XP>sorear: um.
03:00:53<SamB_XP>since when does bespin change IPs several times an hour?
03:01:08<igli>ah ok
03:01:22<sorear>SamB_XP: he also comes in from RCN directly
03:01:28<SamB_XP>huh.
03:01:57<SamB_XP>cmeme is commercial and clog is non-profit, interesting
03:02:23<SamB_XP>cmeme also doesn't have a RealName
03:02:53<SamB_XP>and cmeme doesn't respond to CTCP version like CLOG does
03:03:08<SamB_XP>CLOG is apparantly still at version 0
03:04:23<SamB_XP>heh
03:04:55<SamB_XP>MS suggests to keep site hierarchies fairly flat ;-) (one to three links from frontpage to other pages)
03:07:38<sorear>hmm, nef seems to have moved
03:07:47<sorear>2003 logs give a different ISP
03:08:06<sorear>great works internet, ME (what state is that?)
03:08:32<sorear>*nobody* within the /18 block is on freenode
03:09:02<sorear>ACTION goes back to hmenu hacking
03:10:35<sproingie>maine
03:12:14<SamB_XP>does RCN own the US now?
03:12:27<shapr>Royal Canadian Newbies?
03:12:57<SamB_XP>what is RR?
03:13:10<rabbitear>Reading Responce
03:13:37<rabbitear>I'll have to kick you in the shin now
03:13:54<SamB_XP>ACTION wants a pie chart of #haskell ISPs
03:14:00<SamB_XP>or two
03:14:12<rabbitear>*:P*
03:14:20<chessguy>is RCN an IRC network?
03:14:23<chessguy>ACTION is clueless
03:14:24<shapr>rabbitear: Are you learning Haskell?
03:14:34<rabbitear>shapr: not really.....
03:14:40<SamB_XP>RCN is Residential Cable Network
03:14:43<rabbitear>shapr: I'm learning the locals
03:14:51<rabbitear>shapr: there's a difference
03:14:54<SamB_XP>they offer TV, phone, and internet
03:15:04<SamB_XP>We get phone and 'net from them
03:15:04<shapr>rabbitear: Why are you learning the locals?
03:15:08<rabbitear>shapr: I have to sing sometimes without fear
03:15:38<shapr>rabbitear: The purpose of this channel is really to to learn and teach programming, with a specialization in Haskell.
03:15:56<rabbitear>I know C only
03:16:07<shapr>rabbitear: Do you want to learn Haskell?
03:16:23<rabbitear>I wrote a bunch when I was little, just going on a trip
03:16:27<SamB_XP>if he hangs out here, he probably will
03:16:39<rabbitear>about other people, sick of the deadity
03:16:52<shapr>rabbitear: That sounds like randomly generated nonsense. That sort of thing will get you kickbanned if you continue it.
03:17:23<rabbitear>well, kick me then, I'm will say that to you next time too
03:17:42<SamB_XP>it doesn't sound like MegaHAL
03:17:48<shapr>If you get kickbanned there isn't a next time?
03:17:58<SamB_XP>MegaHAL would say things that were somewhat more related to other things
03:18:06<rabbitear>shapr: I don't know
03:18:10<SamB_XP>(or somewhat less)
03:18:25<sorear>SamB_XP: RR is "roadrunner", Time/Warner's trademark name for their west coast cable internet offering
03:18:44<rabbitear>*bows*
03:18:45<shapr>rabbitear: Have you tried the Haskell tutorials?
03:19:01<rabbitear>no... just got here today
03:19:56<shapr>rabbitear: Try this: http://www.haskell.org/haskellwiki/Learning_Haskell
03:19:57<lambdabot>Title: Learning Haskell - HaskellWiki
03:20:43<SamB_XP>@go Learning Haskell
03:20:44<lambdabot>http://www.haskell.org/learning.html
03:20:44<lambdabot>Title: Learning Haskell
03:20:47<SamB_XP>hmm.
03:21:07<SamB_XP>how old is that page?
03:21:14<SamB_XP>did we even know it was still there?
03:21:25<rabbitear>shapr: where is your thesis statement?
03:22:12<Jaggederest>interesting. a discordian influence in haskell.
03:22:38<SamB_XP>555 page views since 2004?
03:22:44<SamB_XP>not too popular sounding...
03:22:50<shapr>rabbitear: Seriously, please stay on the Haskell topic.
03:23:02<rabbitear>shapr: I will try
03:23:19<Nafai>sorear: Road Runner isn't just on the West Coast...it's also here in Texas
03:23:27<chessguy>SamB_XP, it can't be too old, it has SOE and COFP
03:23:55<shapr>rabbitear: If you want to chat about non-Haskell subjects with the people who frequent #haskell, try #haskell-blah, it's specifically for that sort of off-topic discussion.
03:24:01<shapr>Jaggederest: Hail Eris?
03:24:25<Jaggederest>shapr: I was referring to the rabbitear :)
03:26:01<rabbitear>shapr: I'm nobody but I just got here, right? no thesis statement in your website
03:26:56<shapr>rabbitear: I wasn't aware that I needed one?
03:27:43<Jaggederest>see? either discordian or linguistic barriers.
03:28:27<Jaggederest>I'm trying to figure out if it's worth building a game in haskell. Are the libs/etc up to snuff?
03:28:35<shapr>rabbitear: I think my thesis statement would be "One day I will have a thesis."
03:28:50<rabbitear>say that!!!
03:28:55<rabbitear>it says " http://www.haskell.org/haskellwiki/Learning_Haskell
03:28:56<lambdabot>Title: Learning Haskell - HaskellWiki
03:29:02<rabbitear>sorry 1 sec
03:29:12<shapr>Jaggederest: You won't find a pygame equivalent, but there are bindings to OpenAL, OpenGL, SDL, Cairo, gtk, gtkglarea, and lots more.
03:29:21<shapr>rabbitear: That's not my website. That's the Haskell wikiwiki.
03:29:23<rabbitear>it says "This portal points to places where you can go if you want to learn Haskell."
03:29:32<shapr>Yes, it does say that.
03:29:46<chessguy>this is a nice little site: http://www.haskell.org/complex/why_does_haskell_matter.html
03:29:47<lambdabot>Title: The Lambda Complex
03:29:54<rabbitear>so! is what they gonna not tell you
03:30:20<Jaggederest>ok. I know haskell school of expression deals with GL/sound stuff, I'm thinking a game would be a fun project.
03:30:54<rabbitear>I'm a fifth party
03:31:00<Jaggederest>plus one might entertain the notion of selling it.
03:31:07<shapr>Jaggederest: Some existing games written in Haskell are Frag (quake clone), Yampa Arcade (space invaders game implemented with arrows), and a tank game and a parachuting game I've seen around.
03:31:28<SamB_XP>Jaggederest: SOE doesn't really deal with gamey stuff much...
03:31:42<shapr>rabbitear: Dude, you're pushing it.
03:32:16<Jaggederest>ah proof of concepts. Do they come with code? No, but the core algorithms are the same and I've done some c# d3d stuff
03:32:27<rabbitear>shapr: yes I am, it doesn't like me
03:32:39<Jaggederest>b&!
03:33:14<SamB_XP>remind me to check the stats in a couple of days
03:33:55<shapr>Which stats?
03:34:01<SamB_XP>@where stats
03:34:02<lambdabot>http://www.cse.unsw.edu.au/~dons/irc/
03:34:05<SamB_XP>those stats
03:34:16<SamB_XP>I want to see if it still says "nobody got kicked"
03:34:19<shapr>hehe
03:34:52<shapr>Jaggederest: What sort of game do you want to write?
03:35:09<shapr>Jaggederest: Frag and Yampa Arcade come with sources.
03:35:20<Jaggederest>sweet
03:36:14<Jaggederest>I'm thinking a SDL-based tower defence game, since that type seems to be the next sudoku in terms of popularity
03:38:07<shapr>If you decide to do it as open source, I think I'd enjoy hacking on that.
03:39:26<Jaggederest>yeah, these flash ones leave a lot to be desired. I keep wanting to fix bugs but oops, closed-source binaries.
03:39:49<shapr>Yup
03:39:55<Jaggederest>well, effectively closed, since you can disassemble .swf but only poorly
03:40:13<shapr>I played a few of those tower defense games recently, they're fun.
03:40:30<shapr>Onslaught and desktop defence or something.
03:40:57<Jaggederest>http://onslaught.playr.co.uk/ yup that's the best one so far
03:40:59<lambdabot>Title: Onslaught
03:41:17<shapr>desktop defence is fun also.
03:41:59<Jaggederest>http://novelconcepts.wordpress.com/ apparently those two are making six figures off DTD
03:42:00<lambdabot>Title: Paul & Dave&#8217;s Novel Concepts
03:42:39<shapr>How?
03:42:50<shapr>Advertising?
03:43:15<Jaggederest>yes. In-game mochiads
03:43:36<Jaggederest>plus they are making custom versions for companies' sites
03:43:43<Jaggederest>eg wrigley gum has one
03:44:35<sorear>Grumble, grumble. mplus v. mappend just wasted 10 minutes or so
03:44:36<shapr>Amazing
03:44:40<Jaggederest>http://www.mochibot.com/shared/shared_swfdetail.html?key=7cc46d900ed3978e8a7af588dd20aa91
03:44:42<lambdabot>Title: MochiBot.com :: SWF Detail :: Flash Element TD, http://tinyurl.com/2y7bsy
03:44:53<shapr>Too bad Flash is closed source.
03:45:19<shapr>Someone was writing a Haskell to Flash compiler, but I think they dropped it and never released the source.
03:45:30<Jaggederest>yup. Might be interesting to... yes that heh
03:45:31<sorear>@seen stepcut
03:45:31<lambdabot>stepcut is in #xmonad, #haskell-blah and #haskell. I last heard stepcut speak 1d 43m 3s ago.
03:46:33<cdsmith>I'm interpreting the copyright comment on the Haskell 98 report as allowing and encouraging this. http://www.cafepress.com/cdsmithus.139965523 Anyone disagree?
03:46:39<Jaggederest>swf internally isn't that complicated compared to most bytecode formats, it's just the edge case stuff from the proprietarp back end
03:48:19<Jaggederest>yes it's BSD, you can sell it
03:49:09<cdsmith>I did that so I could buy it myself. I just want to make sure no one thinks its on the shady side.
03:49:31<Jaggederest>nope as long as it's all there you're legit.
03:49:34<sorear>http://www.amazon.co.uk/Haskell-98-Language-Libraries-Revised/dp/0521826144
03:49:36<lambdabot>http://tinyurl.com/24cc3h
03:49:37<sorear>cdsmith: ^^^
03:50:07<cdsmith>sorear: oh, I missed that! :( But yikes, 45 pounds!
03:50:59<Jaggederest>yeah, the cafepress one looks like a steal :)
03:52:06<cdsmith>Does buying the one from Cambridge Univ. Press get money to actual Haskell people, or is it all profit for unrelated publishing sorts?
03:53:34<sorear>ACTION doesn't know
03:53:47<Jaggederest>probably at least 90% unrelated costs.
03:54:07<cdsmith>Okay, just checking for any possible reason to pay a lot more.
03:55:07<Jaggederest>prolly rather you buy the cheaper one and give half the difference direct :)
04:04:44<asicard>I am using System.Directory library to handle some files. How can I test if a file is a symlink without execute a external command (using system in System.Cmd)?
04:08:16<edwardk>haskell to flash wouldn't be that hard, same issues as compiling to javascript, but you get a faster runtime
04:08:30<mlh_>in Posix at a guess, since symlink is a posixish thing
04:08:31<shapr>edwardk: Would you go from STG to flash?
04:08:42<edwardk>yeah
04:08:45<edwardk>same approach
04:08:58<edwardk>i'd go stg to ecmascript 4, which gives me actionscript for free ;)
04:09:01<mlh_>@hoogle getSymbolicLinkStatus
04:09:05<lambdabot>No matches found
04:09:25<edwardk>and the side effect of not having expensive hash lookups for every single operation
04:10:23<asicard>mlh_: Yes, in Posix
04:11:40<shapr>edwardk: Did you ever find a way to get STG out of GHC?
04:13:15<edwardk>i have an open feature request, ian punched it in for 6.8
04:17:10<stepcut>hrm, yhc core *used* to uniquify all the variable names across all functions (as far as I could tell), but recently they added v_fail_0, v_fail_1, etc, which are only unique within a function :(
04:18:35<stepcut>ACTION is compiling haskell -> flash at this very moment...
04:24:52<aeyakovenko>i just set up ubuntu, and i am looking for haskell-binary package, i found one here, http://www.lv.kernel.org/pub/mirrors/ubuntu/pool/universe/h/haskell-binary/, i am new to apt, so what repo would i need to add to /etc/sources.list for me to grab that package?
04:24:54<lambdabot>Title: Index of /pub/mirrors/ubuntu/pool/universe/h/haskell-binary, http://tinyurl.com/2h7fjm
04:25:39<stepcut>aeyakovenko: feisty ?
04:25:55<aeyakovenko>stepcut, i am on feisty
04:26:59<stepcut>probably the lines that contain universe on this page -> http://www.psychocats.net/ubuntu/sources#feisty
04:27:01<lambdabot>Title: Enabling Extra Repositories
04:30:36<aeyakovenko>why is there a pool/universe and a dists/feisty/universe? do i need to add pool as a source?
04:31:13<stepcut>no
04:31:14<Jaggederest>stepcut, are you the one working on the haskell-to-flash compiler? I'd be really interested in that
04:31:41<igli>ubuntu stepcut
04:31:53<igli>er sorry
04:32:03<igli>ACTION wakes up
04:32:22<stepcut>aeyakovenko: no. just the dist
04:32:56<stepcut>aeyakovenko: the dist is a specification that says what files belong to that release (like feisty). The pool is where all the actual .debs live
04:32:59<aeyakovenko>stepcut, well i have feisty already enabled
04:33:20<aeyakovenko>oh i see
04:33:21<stepcut>aeyakovenko: do you have the universe component enabled ?
04:33:36<aeyakovenko>hmm, eb http://us.archive.ubuntu.com/ubuntu/ feisty universe
04:33:38<lambdabot>Title: Index of /ubuntu
04:33:44<aeyakovenko>yea i think i do
04:33:45<stepcut>Jaggederest: yes -- soon it may even work ;)
04:33:59<stepcut>Jaggederest: and, then I can rewrite it to not suck :p
04:34:14<stepcut>aeyakovenko: that looks correct to me
04:34:50<stepcut>aeyakovenko: the binary deb you want to install is, libghc6-binary-dev
04:35:04<stepcut>aeyakovenko: which comes from the haskell-binary source deb
04:35:49<aeyakovenko>hmm, E: Couldn't find package libghc6-binary-
04:35:57<aeyakovenko>hmm, E: Couldn't find package libghc6-binary-dev, i mean
04:36:26<aeyakovenko>i did an apt-get update, and it Hit http://us.archive.ubuntu.com feisty/universe Packages
04:36:26<lambdabot>Title: Index of /
04:36:33<stepcut>aeyakovenko: can you join #haskell-overflow, I don't want to flood the channel with this conversation
04:36:41<aeyakovenko>sure
04:44:41<stepcut>Jaggederest: my swf library is at: http://www.n-heptane.com/nhlab/repos/haskell-swf/ and the haskell->swf is at http://www.n-heptane.com/nhlab/repos/yhc/, but it is not really usable yet
04:44:43<lambdabot>Title: Index of /nhlab/repos/haskell-swf
04:45:19<emu>i just wrote (+ a b) instead of (a + b)
04:45:29<emu>this infix stuff is too difficult for me!!
04:46:39<stepcut>well, (+) a b, would have worked :)
04:49:49<ddarius>@google Typed Quote/AntiQuote
04:49:52<lambdabot>http://www.informatik.uni-bonn.de/~ralf/publications/Quote.pdf
04:49:57<dons>who knew fixity decls where scoped?
04:50:02<Jaggederest>stepcut: thanks, I'll check it out
04:50:07<ddarius>It comes as a surprise everytime.
04:50:42<stepcut>Jaggederest: good luck! It's a shameful mess at the moment
04:50:50<sorear>re.
04:52:00<Jaggederest>no problem, it's better than the alternative(s) which are figuring it out myself or programming in SWF itself :)
04:52:14<stepcut>:p
04:52:57<stepcut>Jaggederest: well, currently the swf library works, but needs some API improvements. The haskell->swf does not yet work properly
04:53:15<stepcut>Jaggederest: but hopefully in the next 1-2 months
04:53:58<Jaggederest>that's soon enough for me :) I'm not trying to build a nuke sub :)
04:56:54<fuzan>is there any way to get at hte value being propogated in a fold?
04:58:25<Jaggederest>fuzan: you could try using a stateful function to fold over, or something. I bet there's a better way though
04:59:42<fuzan>Jaggederest: yah, state'll do it. i'm just trying to simplify a simple tail-recursive func without having to use state
05:20:15<sorear>Is there a standard symbol for a monad in CT?
05:23:07<SamB_XP>Chrono Trigger has monads?
05:24:20<sorear>gyhfrvegyrfegyfelgf
05:25:11<SamB_XP>that's not a very good immitation of a kitty
05:25:16<sorear>no
05:25:26<syntaxfree>@remember SamB Chrono Trigger has monads?
05:25:27<lambdabot>Done.
05:25:31<sorear>it's an imitation of forceful forehead/keyboard interaction
05:25:37<sorear>repeatedly
05:26:03<SamB_XP>it might be a slightly better immitation of that
05:26:22<syntaxfree>@quote monads
05:26:23<lambdabot>SamB says: Chrono Trigger has monads?
05:26:32<SamB_XP>@quote monads
05:26:32<lambdabot>psykotic says: [monads aren't hard] they're just monoids on the category of endofunctors over some category, what's the big deal?
05:26:48<syntaxfree>@quote monads
05:26:48<lambdabot>gimboland says: at present i'd say "tinkering with a nuclear bomb" is approximately where i am with monads...
05:47:40<whitenoyce>so if one can program well in haskell then it is safe to say that person understands monads?
05:48:08<igli>other way round
05:48:13<igli>perhaps
05:48:18<igli>but yeah
05:48:22<whitenoyce>heh
05:48:40<whitenoyce>maybe it is like a triangle
05:48:51<whitenoyce>if there are three sides then it is a triangle
05:48:59<whitenoyce>or if it is a triangle then it has three sides
05:49:10<igli>#haskell-blah
05:49:14<whitenoyce>its not a condition but a definition...?
05:49:33<igli>sorry all i heard was "blah blah blah" ;)
05:49:59<whitenoyce>yeah i blah a lot
05:50:03<igli>lol
05:50:04<whitenoyce>it has left me poor
05:50:05<ddarius>sorear: The functor is usually name T
05:50:07<igli>me 2 :)
05:50:26<ddarius>whitenoyce: No.
05:50:41<sorear>ddarius: Is that an uppercase latin T or a \top ?
05:50:43<ddarius>You understand how monads are applied to programming and semantics.
05:50:43<igli>ACTION sits corrected
05:51:02<ddarius>sorear: Usually a bold sans serif T
05:51:07<ddarius>The letter
05:51:25<whitenoyce>ddarius, could you clarify?
05:51:26<igli>functor is class?
05:51:26<sorear>ok.
05:51:32<whitenoyce>perhaps with an example
05:51:44<ddarius>It is not uncommon to differentiate (the functor of) a monad from an arbitrary functor.
05:52:03<igli>ah common idiom?
05:52:12<ddarius>whitenoyce: Monads have many many other applications and properties that are not relevant to how they are used in Haskell.
05:52:19<igli>hmm
05:52:23<igli>how come?
05:52:34<igli>ah app domain perhaps
05:52:40<ddarius>Functor is a class and a thingy from category theory.
05:52:55<igli>hehe who thought up thingy?
05:53:14<igli>a meta-class?
05:55:55<ddarius>Incidentally, a simple example of a monad that is not directly to Haskell is a closure operator in some poset.
06:06:10<whitenoyce>ddarius, so even if you're a good haskell programmer you may still not understand monads?
06:25:57<^buggy^>http://programming.linux.com/article.pl?sid=07/06/07/1654251&from=rss
06:25:59<lambdabot>Title: Linux.com | It is can be LOLCODE time plz?, http://tinyurl.com/2omrlz
06:26:30<cr>the virus :/
06:43:59<dankna>that introductory article is both longer and less entertaining than the project's actual front page
06:47:31<whitenoyce>http://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours <- much better :D
06:47:32<lambdabot>Title: Write Yourself a Scheme in 48 Hours - Wikibooks, collection of open-content text ...
06:50:24<whitenoyce>:map <F4> :w \| :!ghc ./% && ./a.out <- ~/.vimrc :D
07:38:24<cinimod>@seen dons
07:38:24<lambdabot>dons is in #xmonad, #haskell-soc and #haskell. I last heard dons speak 22m 37s ago.
07:39:14<cinimod>Can someone tell me the status of data.binary?
07:39:35<cinimod>I know you get ByteString free with ghc now but what about Binary?
07:39:57<sjanssen>@hackage binary
07:39:57<lambdabot>http://hackage.haskell.org/cgi-bin/hackage-scripts/package/binary
07:40:13<sjanssen>cinimod: not included with ghc -- you can grab it there ^^^
07:40:46<cinimod>sjanssen: thanks. any plans for getBit and putBit or do I roll my own?
07:41:01<dons>there are plans, but we've not come up with the best way yet
07:42:17<whitenoyce>difficulties with white space
07:42:27<whitenoyce>why do i need 10 spaces after starting a do block or else i get
07:42:33<whitenoyce> The last statement in a 'do' construct must be an expression
07:43:41<whitenoyce>this is very stressful
07:43:59<whitenoyce>11 spaces no, 9 no, 8 no, tab no, 2 tabs no
07:44:02<whitenoyce>10 spaces yes
07:44:12<whitenoyce>main = do args <- getArgs
07:44:12<whitenoyce> putStrLn ("Hello, " ++ args !! 0 ++ " " ++ args !! 1)
07:44:24<whitenoyce>exactly ten spaces to putStrLn
07:44:57<whitenoyce>why isn't tab working?
07:45:54<cinimod>dons: IIRC NewBinary had a way of doing this. Can't you just copy?
07:47:08<kfish>whitenoyce, http://haskell.org/tutorial/patterns.html#sect4.6
07:47:08<lambdabot>kfish: You have 1 new message. '/msg lambdabot @messages' to read it.
07:47:09<lambdabot>Title: A Gentle Introduction to Haskell: Patterns
07:48:35<kfish>whitenoyce, http://haskell.org/onlinereport/syntax-iso.html#layout
07:48:36<lambdabot>Title: Haskell 98 Syntax
07:48:40<dons>cinimod: its a very different library. the idea though, would be similar. we plan to support bit access soonish
07:48:58<dons>but don't want to compromise speed to do it, the preferred idea is via a bit-level monad transformer
07:49:12<dons>that would layer a bit access strategy over the current code
07:49:35<DRMacIver>?where arrows
07:49:35<lambdabot>http://www.haskell.org/arrows/
07:49:45<cinimod>dons: what should I do for now? State monad with getWord8 / putWord8?
07:50:09<dons>yep, something like that.
07:50:31<dankna>Hm. Will I be duplicating anyone else's work if I figure out how to get c2hs to cough up a binding to Apple's Carbon?
07:50:38<cinimod>ok but I don't want to re-invent wheels
07:50:41<dankna>I'm only starting to read up on how to do it, so it may turn out to be trivial...
07:50:48<whitenoyce>ah ok i get it
07:50:54<whitenoyce>kfish, thank you
07:50:54<whitenoyce>!
07:51:01<whitenoyce>main = do args <- getArgs
07:51:01<whitenoyce> putStrLn ("Hello, " ++ args !! 0 ++ " " ++ args !! 1)
07:51:04<whitenoyce>works
07:51:45<dons>cinimod: there are no wheels. you'll be the first.
07:51:58<dons>dankna: hmm. sounds a bit like Mocha/HOC
07:52:09<dons>dankna: google for those, they were the first serious bindings to cocoa
07:52:16<dankna>Yeah, I spent two days trying to do stuff with HOC.
07:52:42<dankna>It's a nice package except there are things that are just plain unimplemented... essential ones for nontrivial programs, like init methods and calling superclass methods.
07:52:48<DRMacIver>(Of course, I bet by the time I've understood arrows, someone will tell me "Oh, we don't use arrows any more. We've generalised them to chipmunks.")
07:53:01<dankna>It might be that if I weren't so new to Haskell as well, I would be able to figure out how to go behind the type system's back.
07:53:13<dankna>But Carbon is a non-OO API so it should be a lot easier to bind against.... in theory.
07:53:17<cinimod>dons: ok I may have a look next weekend.
07:53:17<DRMacIver>You shouldn't go behind the type system's back. ;)
07:53:28<dankna>Right. :)
07:53:40<cinimod>I'm finishing off Packed Encoding for integers (ASN.1) at the moment.
08:37:10<lumi>08:17 < sorear> Is there a standard symbol for a monad in CT?
08:37:10<lumi>08:18 -!- arjanb [i=borganis@borganism.student.utwente.nl] has quit ["bbl"]
08:37:10<lumi>08:20 < SamB_XP> Chrono Trigger has monads?
08:39:18<opqdonut>:D
08:40:42<lumi>Sorry, mispaste
08:40:57<opqdonut>fun anyways
08:40:59<lumi>(I found it amusing and stashed it)
08:41:15<opqdonut>?help remember
08:41:15<lambdabot>quote <nick>
08:41:15<lambdabot>remember <nick> <quote>
08:41:15<lambdabot>Quote somebody, a random person, or save a memorable quote
08:41:37<lumi>?quote chrono
08:41:37<lambdabot>SamB says: Chrono Trigger has monads?
08:41:43<opqdonut>ah
08:41:52<opqdonut>i was just about to ?remember the whole thing :)
08:43:18<Jaggederest>@yow start
08:43:18<lambdabot>RHAPSODY in Glue!
08:43:33<Jaggederest>sounds about right
08:43:49<Jaggederest>@paste
08:43:49<lambdabot>Haskell pastebin: http://hpaste.org/new
08:44:29<hpaste> Jaggederest annotated "(no title)" with "More TSP stuff" at http://hpaste.org/189#a3
08:45:43<Jaggederest>problems: it's too fast, I'm not using the nice permutation code yet, and it's not true hillclimbing yet
08:46:36<Jaggederest>unless 'evaluate all the possible combinations and find the best one-step change' is hillclimbing.
08:48:58<dankna>heh, I just noticed ghc jumped from version 6.4.2 to 6.6
08:49:24<Igel>hello
08:49:31<dankna>I bet there's a story to that :) oh well, all I need is for it to work.
08:49:32<Igel>i got quite an ugly problem...
08:49:32<dankna>ah, hi.
08:49:51<Igel>is there a way to block a thread?
08:50:05<Igel>i need to lock it to wait for input from a different thread
08:50:14<Igel>and then return the results
08:50:45<Igel>(spawning a gui, where the user asynchronously enters data)
08:52:46<Igel>its like
08:52:52<Igel>do -- IO ()
08:53:06<Igel>dataRef <- newIORef
08:53:20<Igel>spawnUserThread -- sets dataRef
08:53:36<Igel>blockUntilDataRefIsSet
08:53:48<Igel>readIORef dataRef >>= return
08:54:48<Jaggederest>hmm need dataflow extensions. Oz 'just blocks'
08:56:37<Igel>might it work using software transactional memory (STM)?
08:56:58<Igel>i'm not so fit with that, so it might take me an hour finding out ;)
08:57:25<Jaggederest>yeah I'm not fit with any of this so...heh
09:05:35<Igel>hey that might work...
09:05:37<Lemmih>Igel: Use an MVar.
09:07:29<Igel>Lemmih: does readMVar block?
09:07:49<Igel>the documentation doesnt say
09:09:45<Lemmih>Igel: Yes, readMVar block on empty mvars.
09:10:00<Igel>well thats good news :)
09:10:02<Igel>thanks
09:10:05<Lemmih>Igel: And the documentation _does_ say.
09:10:28<Igel>hmm?
09:10:32<Igel>oops
09:10:37<Igel>:]
09:10:47<Igel>following the link of takeMVar, it does
09:10:52<Igel>i'm sorry
09:10:57<Lemmih>No problem (:
09:11:36<Jaggederest>ah also there's Control.Exception block which is interesting
09:12:06<Jaggederest>hmm maybe not
09:19:53<ddarius>dankna: There is no story.
09:20:45<dankna>yeah, after I said that I figured out that you use the even-number-stable policy
09:20:47<dankna>which makes sense
09:21:23<ddarius>whitenoyce: Put a newline immediately after opening a 'do', and, no, being a superlative Haskell programmer does not mean you know all that much about monads beyond how they are used in Haskell.
09:24:06<Igel>Lemmih, Jaggederest: i just wanted to tell you, i decided for software transactional memory
09:24:19<Igel>the stms TVar fits best
09:24:38<Igel>nonetheless thank you^^ :)
09:30:29<Jaggederest>ok, so this one is a new one: ambiguous type variable 'a' in the constraints 'Read a' and 'Show a'
09:30:53<Jaggederest>I'm trying to read a file in, parse it, and spit it back out
09:31:55<Lemmih>Jaggederest: Parse it to what?
09:32:30<Jaggederest>a list of arbitrary stuff. in this case list of lists of Float
09:33:14<Jaggederest>distance matrix for the TSP [[0, 1], [1,0]] in the trivial case
09:33:26<Lemmih>Jaggederest: Well, tell that to your Haskell compiler.
09:34:03<Jaggederest>hmm so I have to wrap read up and tell it to do right, is all?
09:36:07<Jaggederest>hmm, interesting, so you do have to specialize it like that. No general IO, I guess :)
09:38:21<Lemmih>Jaggederest: Well, 'show . read' is problematic.
09:39:05<Jaggederest>so if I feed it into a typed function (not a -> a) it'll maybe figure it out?
09:40:51<Jaggederest>hey, readStuff :: String -> [[Float]] readStuff = read works heh silly compiler.
09:40:58<Jaggederest>thanks Lemmih
09:45:44<mehrheit>I got this GHC error message: „Could not find module `IO': it is a member of package haskell98, which is hidden“; fixed by appending „-package haskell98“ to cmdline. Shouldn't this be the default?
09:46:33<Lemmih>mehrheit: How about using System.IO?
09:48:56<mehrheit>oh, yes. hoogle returned only IO.hFlush after a search for „hFlush“.
09:50:14<Lemmih>mehrheit: Alternatively, you can use --make to automagically include needed packages.
09:51:11<mehrheit>don't cabal build scripts do it by default?
09:51:38<Lemmih>mehrheit: No, not any more. That bug was fixed some time ago.
09:55:01<mehrheit>why is that a bug?
09:55:44<Jaggederest>package conflicts, I think
10:42:15<olsner>why doesn't "instance Enum (Int, Int) where ..." work?
10:42:45<Cale>olsner: -fglasgow-exts
10:43:16<cinimod>or data Foo = MkFoo Int Int
10:43:24<cinimod>instance Enum Foo where ...
10:43:31<Lemmih>olsner: Enum (a,b) where?
10:44:20<olsner>glasgow-exts seemed to do it.. but what's up with that? Is (,) some special thing that can't have instances or something?
10:44:29<DRMacIver>olsner: Haskell 98 doesn't allow you to declare instances for particular values of type parameters, only for all type parameters (possibly bound by a type class). I forget the reasoning.
10:44:55<cinimod>olsner: you can always create your own datatype as above
10:44:57<DRMacIver>So (Foo a, Bar b) => Enum (a, b) would be allowed, but (Int, Int) wouldn't.
10:45:26<olsner>mmkay, so it was specifying Int that didn't work
10:46:01<DRMacIver>Yes.
10:46:13<olsner>@pl (\f (x,y) -> (f x, f y))
10:46:13<lambdabot>(`ap` snd) . (. fst) . (flip =<< (((.) . (,)) .))
10:46:17<DRMacIver>(Enum a, Enum b) => Enum (a, b) would work I think (modulo me screwing up the syntax)
10:46:30<DRMacIver>olsner: Isn't that one of the arrow operations?
10:46:50<Saizan>?type join (&&&)
10:46:52<lambdabot>forall (a :: * -> * -> *) b c. (Arrow a) => a b c -> a b (c, c)
10:47:00<Saizan>?type join (***)
10:47:02<lambdabot>forall (a :: * -> * -> *) b c. (Arrow a) => a b c -> a (b, b) (c, c)
10:47:12<olsner>?type (><)
10:47:14<lambdabot>Not in scope: `><'
10:47:42<DRMacIver>?type (&&&)
10:47:44<lambdabot>forall (a :: * -> * -> *) b c c'. (Arrow a) => a b c -> a b c' -> a b (c, c')
10:48:23<olsner>seems *** is what I want
10:48:31<olsner>or rather (f *** f)
10:56:30<cinimod>> (-1) `div` 2
10:56:32<lambdabot> -1
10:57:06<cinimod>> (-1) `mod` 2
10:57:07<lambdabot> 1
10:57:55<Jaggederest>wait what?
10:58:39<Saizan>Jaggederest: ?
10:58:59<Jaggederest>cinimod's thing above.
10:59:14<Jaggederest>mod returning the abs
10:59:15<Saizan>2*(-1) +1 = -1
10:59:30<bauchus>Haskells XHTML combinator library is great. It could even be improved by adding a readonly attribute...
10:59:32<cinimod>Yes that's puzzling me but Saizan has said it already
10:59:41<Jaggederest>ah right, long night.
10:59:50<Jaggederest>forgot the mod identity
10:59:52<Saizan>> ((-1) `quot` 2,(-1) `rem` 2)
10:59:54<lambdabot> (0,-1)
11:00:04<cinimod>m = q*n + r
11:00:19<cinimod>Ah so I need quot and rem not div and mod
11:02:25<quicksilver>it's impossible to rememeber which is quotrem and which is divmod
11:02:30<quicksilver>I have to check every single time :)
11:04:02<Saizan>and i've seen many fail the checking because of the lower precedency of (-)
11:21:05<dankna>hm
11:21:37<dankna>is it correct that Data.FiniteMap disappeared from 6.4 to 6.6?
11:21:43<dankna>er, in ghc
11:22:12<dankna>or is the problem my local install
11:22:29<dankna>my best guess is that it was renamed, but it's not obvious to what
11:22:50<dankna>uh, this is me trying to build GreenCard, but it's pretty clear that's the reason it won't
11:24:46<Saizan>to Data.Map i think
11:24:54<dankna>ACTION nods
11:24:55<Saizan>?docs Data.Map
11:24:55<lambdabot>http://haskell.org/ghc/docs/latest/html/libraries/base/Data-Map.html
11:25:25<dankna>let's see if the naive fix works, then...
11:33:30<dankna>hmm, interface differs.... the parameters to Data.Map.lookup are different from those to Data.FiniteMap.lookupFM.
11:34:09<dankna>ah. because it now uses monads. which must have been the point of the change.
11:45:04<whitenoyce>if haskell is so functional, why do i see "do" in all the tutorial examples
11:45:11<whitenoyce>http://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours/Parsing
11:45:13<lambdabot>http://tinyurl.com/2yojoc
11:45:17<beelsebob>ecause you're reading the wrong tutorial
11:45:35<beelsebob>plus... do *is* functional
11:45:47<beelsebob>it's not just a "do this bit imperatively" keyword
11:45:58<beelsebob>it's syntactic sugar for a load of purely functional stuff
11:45:59<qwr>whitenoyce: you can always write the "do" expression without do
11:46:06<LeCamarade>whitenoyce: Haskell is functional, no matter what anything/anybody says. If Haskell isn't, nothing is.
11:46:57<LeCamarade>/me slinks back to whence he came ...
11:47:16<xpika>is it possible to write a funtion for map which can skip elements?
11:47:47<beelsebob>xpika: so you want mapSkip :: (a -> a) -> (a -> Bool) -> [a] -> [a]
11:47:48<beelsebob>?
11:48:05<olsner>xpika: (\x -> if (cond x) then f x else x)
11:48:07<xpika>beelsebob: pretty much
11:49:04<beelsebob>xpika: mapSkip _ _ [] = []; mapSkip f c (x:xs) = if c x then (f x):(mapSkip f c xs) else x:(mapSkip f c xs)
11:49:23<beelsebob>should probably push the if inwards there
11:49:39<qwr>@undo do { x <- getLine; putStrLn x }
11:49:39<lambdabot>getLine >>= \ x -> putStrLn x
11:49:40<beelsebob>mapSkip _ _ [] = []; mapSkip f c (x:xs) = (if c x then (f x) else x):(mapSkip f c xs)
11:49:57<bartw>what is the (a -> a) for in mapSkip ?
11:50:08<beelsebob>bartw: the function being mapped
11:50:11<bartw>(a -> Bool) -> [a] -> [a] would seem enough ?
11:50:24<beelsebob>it needs a function to map over things
11:53:19<beelsebob>xpika: that of course is just a more general case of map
11:53:26<beelsebob>less general even
11:53:50<beelsebob>mapSkip f c = map (\x -> if c x then f x else x)
11:55:36<dons>?yow
11:55:37<lambdabot>There's a little picture of ED MCMAHON doing BAD THINGS to JOAN RIVERS
11:55:37<lambdabot>in a $200,000 MALIBU BEACH HOUSE!!
11:57:08<bartw>pretty cheap house
11:57:41<LeCamarade>Yeah. Cheap. Zimbabwe dollars aren't that cool.
11:58:17<bartw>hmz ?
11:58:23<xpika_>@let a=1
11:58:26<lambdabot>Defined.
11:58:38<xpika_>@L.a
11:58:38<lambdabot>Not enough arguments to @.
11:58:42<xpika_>> L.a
11:58:43<lambdabot> 1
11:58:55<xpika_>@let splitBy c xs = (filter (not . c) xs, filter c xs )
11:58:55<lambdabot>Defined.
11:59:02<bartw>a shed costs about half that around here (nl)
11:59:07<xpika_>splitBy odd [1..10]
11:59:09<xpika_>> splitBy odd [1..10]
11:59:10<lambdabot> ([2,4,6,8,10],[1,3,5,7,9])
11:59:33<LeCamarade>@src break
11:59:34<lambdabot>break p = span (not . p)
12:00:01<xpika_>beak odd [1..10]
12:00:01<xpika_>> beak odd [1..10]
12:00:01<lambdabot> Not in scope: `beak'
12:00:01<xpika_>> break odd [1..10]
12:00:03<lambdabot> ([],[1,2,3,4,5,6,7,8,9,10])
12:00:05<xpika_>:(
12:00:15<xpika_>splitBy!
12:00:20<xpika_>++
12:00:25<dankna>hmmmmm, I got GreenCard half compiling, but it's generating one of its own source files with a wrong path to the matching header...
12:00:30<LeCamarade>> groupBy odd [1 .. 10]
12:00:31<lambdabot> Couldn't match expected type `a -> Bool'
12:01:24<roconnor>sweet, a make replacement in Haskell
12:01:32<roconnor>I've been wanting one for weeks!
12:01:51<dankna>eh?
12:01:51<xpika_>hmake or Setup.hs?
12:02:09<roconnor>http://ashish.typepad.com/ashishs_niti/2007/06/another_dsl_emb.html
12:02:11<lambdabot>http://tinyurl.com/2dxvoc
12:09:47<Cheery>there's bunch of AI projects around...
12:10:33<Cheery>which ones of them are of value?
12:11:30<Cheery>and which of those mimics closest the way how human processes information?
12:11:39<dankna>that's an amazingly understated question
12:11:56<dankna>also, I don't know
12:12:47<Cheery>yes, I'm going to find out, just wondering, whether anyone other here has look around these
12:19:51<Cheery>compilers tend to make lossy translations from languages to another, they are, in fact, never more efficient in doing that than other translators written
12:20:20<Cheery>also, as much inflexible
12:28:49<hpaste> xpika pasted "constructor ?" at http://hpaste.org/237
12:29:08<ndm>@seen Shimei
12:29:08<lambdabot>Shimei is in #xmonad and #haskell. I last heard Shimei speak 1d 5h 42m 40s ago.
12:33:41<ekidd>The advantage of writing a paper is that is forces you to realize *exactly* what you're talking about. Ouch.
13:01:56<ndm>@pl f c = gmapQ DataBox (asTypeOf (fromConstr c) x)
13:01:57<lambdabot>f = gmapQ DataBox . flip asTypeOf x . fromConstr
13:03:14<araujo>morning
13:04:22<Jaggederest>evening :)
13:11:26<dankna>hmmm
13:11:51<dankna>I got GreenCard to compile under ghc 6.6, after a few changes and faking an entry for ghc-pkg
13:12:00<dankna>but when I try to build the examples that go with it, I get
13:13:04<hpaste> dankna pasted "attempt to run GreenCard on its example after modifications" at http://hpaste.org/238
13:13:41<bartw>with and without version
13:13:57<dankna>pardon?
13:14:09<dankna>oh,
13:14:38<dankna>ghc-pkg problem then. go figure.
13:18:31<dankna>hm, where is that even coming from. maybe it's looking for a version 3.01 and getting a version 3.1....
13:18:46<dankna>grepped that directory for any use of either number, found nothing, so it must be in how it's installed
13:20:56<dankna>updated that, now there are no references to 3.01 anywhere that it ought to be able to see...
13:21:00<dankna>surely the .hi file itself doesn't contain a version number
13:26:44<dankna>well, it doesn't contain it as text, anyway, since grep would have caught that, and I don't see anything in the build process that could possibly be passing it that info anyway
13:27:49<dankna>..... I guess that's the problem, actually
13:28:59<dankna>oh! It *is* in the .hi file, the -package-name option to ghc
13:31:09<araujo>http://ertos.nicta.com.au/research/sel4/
13:31:12<lambdabot>Title: NICTA | ERTOS - http://www.ertos.nicta.com.au/research/sel4/home.pml
13:31:13<araujo>nice
13:32:22<dankna>looks like an interesting project, definitely
13:34:28<dankna>all right! it runs its demo programs
13:35:12<araujo>yeah
14:05:35<SamB>ACTION discovers the joys of manually moving modules from the "hidden" list to the "exposed" list
14:06:13<bos>not using "ghc-pkg expose"?
14:06:38<SamB>that seems to be for *packages*
14:08:22<SamB>oh, nice, our alex is number 10 on google...
14:38:19<SimonRC>I had an epiphany just now.
14:38:37<SimonRC>I grok how unsafePerformIO subverts the typesystem.
14:39:06<SimonRC>It makes sense once you make the foralls explicit
14:40:07<SimonRC>For example, if its input has type "forall a. IO (IORef a)", it is forcede to pretend that it actually has type "IO (forall a. IORef a)", in order to do its job.
14:40:51<SimonRC>but no values of that type exist, so one of its concrete subtypes will probably be picked, but still presumed to have the polymorphic value.
14:41:04<SimonRC>That is how one of the standard examples works.
14:44:17<dons>kfish: available to translate? :-) http://d.hatena.ne.jp/tmatsuu/20070610#1181442828
14:44:18<lambdabot>Title: ¤â¤·¤â¤·¡¢matsuu¤Ç¤¹¤¬...
14:44:40<dons>kfish: seems to be a pretty glowing review?
14:44:42<pejo>Be careful with the word 'subtype', people might interpret it different from the way you mean.
14:46:13<SimonRC>Is there a better term?
14:46:59<araujo>ACTION wonders if dons knows something about seL4
14:47:41<dons>araujo: only a little
14:47:51<dons>araujo: talk to Thomas2
14:48:03<araujo>nice
14:49:39<mehrheit>what does forall mean?
14:49:53<mehrheit>I notice it a lot, but can't find the description.
14:50:06<mehrheit>(or a description)
14:51:37<kpreid>mehrheit: http://en.wikipedia.org/wiki/For_all
14:52:01<Heffalump>"forall a . foo" means "foo, for any possible value of a"
14:53:26<SimonRC>mehrheit: If it displays correctly, this symbol: ∀
14:54:20<kpreid>@type reverse
14:54:29<lambdabot>forall a. [a] -> [a]
14:54:38<SimonRC>good example there
14:55:00<SimonRC>consider how it is different from "(forall a. [a]) -> (forall a. [a])"
14:55:03<araujo>@type id
14:55:05<lambdabot>forall a. a -> a
14:55:08<kpreid>so this means: "For any type, let's call it a, this is a function from [a] to [a].
14:55:19<SimonRC>kpreid: yes, roughly
14:55:23<mehrheit>how does it differ from simple [a] -> [a]?
14:55:31<kpreid>mehrheit: it doesn't; the forall is implicit
14:55:34<SimonRC>[a] -> [a] is an abbreviation
14:56:03<kpreid>In Haskell 98, there's always an implicit forall just after the ::.
14:56:18<kpreid>That's the effect of the specified rules of type variable scope.
14:56:29<SimonRC>Though in ghc if you put in explicit foralls in your top-level type signatures, that turns on lexically-scoped types, ISTR
14:57:14<SimonRC>which means that any types within the function do *not* have implicit foralls, but instead free type variables refer to, erm....
14:57:40<SimonRC>... other type variables of the same name, though I don't konw the exact rules
14:58:21<SimonRC>It's needed when the types in signatures within the function depend on the types of the arguments in a way too complicated for the compiler to figure out.
14:58:26<SimonRC>I think
14:58:35<SimonRC>i.e. very rarely
14:59:36<kpreid>lexically scoped type variables are mostly (iiuc) interchangeable with sufficiently clever uses of asTypeOf
15:01:43<SimonRC>kpreid: yes, though the former is elegant and the latter is a slight hack
15:07:20<roconnor>> x231C
15:07:24<lambdabot> Not in scope: `x231C'
15:07:25<roconnor>> 0x231C
15:07:26<lambdabot> 8988
15:15:49<geezusfreeek>@pl forever a = a >> forever a
15:15:49<lambdabot>forever = fix (ap (>>))
15:16:01<geezusfreeek>what is "fix"? i can't find it
15:16:05<kpreid>@index fix
15:16:06<lambdabot>Control.Monad.Fix, Control.Monad.Reader, Control.Monad.Writer, Control.Monad.State, Control.Monad.RWS, Control.Monad.Identity, Control.Monad.Error
15:16:16<geezusfreeek>aha, thanks
15:16:19<kpreid>geezusfreeek: import Control.Monad.Fix
15:16:37<kpreid>afaik, it's there just because having defined mfix, there ought to be a fix available too
15:16:48<kpreid>@src fix
15:16:48<lambdabot>fix f = let x = f x in x
15:17:02<geezusfreeek>oh, it's that function
15:19:58<Heffalump>for f :: (a -> b) -> (a -> b), does changing the definition to "fix f = let x a = f x a in x" change the semantics?
15:25:44<fasta>I am currently passing a few functions a few levels through my code. If I put those functions in type classes, I don't need to do that anymore. What is better?
15:26:03<Heffalump>whichever is more natural
15:26:13<Heffalump>are they obviously global properties of the type in question?
15:26:19<Heffalump>you could also use implicit parameters
15:26:47<geezusfreeek>fasta: try it and see what it feels like :)
15:26:51<fasta>Heffalump: they set the fields of nodes in a tree of a specific type correctly.
15:27:16<fasta>Heffalump: for every type there are specific functions associated with it.
15:28:34<geezusfreeek>sounds like a job for typeclasses to me
15:38:16<MarcWeber>I want to listen to mouse events on a remote computer. I've written some small functions converting the 3 byte data chunks (ps2 protocol) from /dev/../usb..mouse to some event datatype.
15:39:24<MarcWeber>When a client connects I could open the device again and interprete the data stream again. But How is this done if I want to transform the data stream first and then duplicate it to send it to more than one client?
16:12:14<|Jedai|>@source foldr
16:12:14<lambdabot>foldr not available
16:12:48<lumi>@src foldr
16:12:48<lambdabot>foldr k z xs = go xs
16:12:48<lambdabot> where go [] = z
16:12:48<lambdabot> go (y:ys) = y `k` go ys
16:12:49<|Jedai|>@src foldr
16:12:49<lambdabot>foldr k z xs = go xs
16:12:49<lambdabot> where go [] = z
16:12:50<lambdabot> go (y:ys) = y `k` go ys
16:13:47<SimonRC>why the inner function
16:14:09<SimonRC>surely any sensible compiler can optimise out the passed-through parameter?
16:14:35<Heffalump>the definition may have been written before and not changed
16:16:03<bluestorm_>@src foldl
16:16:04<lambdabot>foldl f z xs = lgo z xs
16:16:04<lambdabot> where lgo z [] = z
16:16:04<lambdabot> lgo z (x:xs) = lgo (f z x) xs
16:17:23<Philippa>SimonRC: some sensible compilers will only do that after translating into a rather similar form anyway
16:18:53<Philippa>if you want to look at it one way, it makes the loop invariants totally obvious
16:25:40<SimonRC>Philippa: true
16:30:55<Philippa>it shouldn't be too big a surprise if you see library code written in a form that bears a close resemblance to one of the IRs involved
17:11:27<clanehin>I'm not the first person to say this right? Shouldn't: ++ be generalized to equal `mappend`
17:15:05<ibid>clanehin: ++ used to be mappend, then it was specialized and mappend was created
17:15:24<Heffalump>clanehin: the argument against doing that is that the type confuses beginners
17:16:36<ibid>there were a number such changes in 1.4->98
17:18:05<clanehin>I see.
17:22:57<DRMacIver>?where lazy bytestring
17:22:57<lambdabot>I know nothing about lazy.
17:23:01<DRMacIver>Hm
17:23:38<bos>@where fps
17:23:38<lambdabot>http://www.cse.unsw.edu.au/~dons/fps.html
17:23:50<bos>that's what you want
17:28:15<DRMacIver>Thankee.
17:34:57<igli>@botsnack
17:34:57<lambdabot>:)
17:47:42<roconnor>> sort ["20050507T111000Z","20050507T1010Z"]
17:47:46<lambdabot> ["20050507T1010Z","20050507T111000Z"]
17:50:42<igli>@src fix
17:50:42<lambdabot>fix f = let x = f x in x
17:50:47<igli>@botsnack
17:50:48<lambdabot>:)
17:50:58<igli>there there lambdabot :)
17:56:31<chessguy>'ello
17:56:51<augustss>'allo, 'allo
17:57:06<igli>this could get boring ;)
17:57:09<chessguy>yes, pardon my yankee accent
17:57:28<igli>eh?
17:57:28<emu>hi
17:57:42<igli>#haskell-blah chessguy ;)
17:57:56<chessguy>hm?
17:58:05<igli>er
17:58:40<augustss>ah
17:58:47<igli>..
17:58:55<igli>
17:58:56<chessguy>this is what i love about haskell, such deep, intellectual conversations
17:59:04<kaol>
17:59:14<igli>yeah well make some sense then :D
17:59:47<igli>or talk crap in #haskell-blah ;)
17:59:53<augustss>chessguy: talk to the bot if we're not good enough for you
18:00:00<igli>#haskell-blah chessguy ;)
18:00:13<augustss>:)
18:00:22<chessguy>igli, we're not that strict usually
18:00:28<igli>who's we?
18:00:39<chessguy>i mean, if there's going to be an extended discussion, it's usually directed to -blah
18:00:44<chessguy>we, the citizens of #haskell
18:00:45<augustss>me and the mice in my pocket
18:00:53<igli>well direct it then
18:01:13<chessguy>but there's no need to be a jerk about it
18:01:25<igli>oh man, i do it so well ;D
18:02:44<igli>ACTION really really tries
18:02:46<chessguy>so DSLs keep coming up lately. what's a good example of a large DSL in haskell
18:03:01<igli>meh is this haskell code then?
18:03:03<Vq^>chessguy: yampa?
18:03:20<chessguy>Vq^, was that a question or an answer?
18:03:44<igli>#haskell-blah chessguy ;)
18:03:56<Vq^>chessguy: an answer coupled with the question, "will this do?" :o)
18:04:14<chessguy>ah, ok.
18:04:19<chessguy>@where yampa
18:04:19<lambdabot>http://www.haskell.org/yampa/
18:04:20<igli>ACTION waits for some actual code
18:04:58<chessguy>oh, that's the porting of the HSOE stuff to arrows, isn't it?
18:05:15<igli>ACTION waits for some actual code
18:05:38<daniel_larsson>Go browse a darcs repo for actual code, if that's what you're looking for )
18:06:09<igli>ACTION waits for a kick ;)
18:06:14<igli>er ni
18:06:18<igli>no*
18:06:22<igli>sorry :D
18:06:32<bos>@seen sorear
18:06:33<lambdabot>I saw sorear leaving #ghc, #xmonad, #haskell-overflow, #haskell-blah and #haskell 10h 27m 53s ago, and .
18:07:12<Tanuk>What's #haskell-overflow?
18:07:22<Vq^>Tanuk: an irc-channel
18:07:34<Tanuk>Vq^: Thanks.
18:07:34<chessguy>Tanuk, for extended on-topic discussions about haskell
18:08:11<Vq^>chessguy: on-topic=
18:08:16<Vq^>s/=/?/
18:08:26<chessguy>meaning about haskell
18:08:40<Vq^>chessguy: #haskell-blah isn't about haskell
18:08:46<fasta>class Foo a b where
18:08:48<fasta> foob:: a -> b -> a
18:08:48<fasta>
18:08:48<fasta>some_code a = do
18:08:48<fasta> foob a
18:08:48<fasta> return False
18:09:01<Vq^>chessguy: you must be confusing it with #haskell-overflow
18:09:01<igli>as in real code you're having real probs with imo
18:09:02<chessguy>Vq^, i never said it was
18:09:04<fasta>Is there any context where some_code should not give an error?
18:09:18<chessguy>Vq^, either that or i'm answering the question about what #haskell-overflow is
18:09:20<Vq^>chessguy: oh, i must have misinterpretted you, sorry
18:09:30<igli><fasta> Is there any context where some_code should not give an error?
18:09:51<fasta>igli: foob is applied to one argument.
18:10:13<igli>un-huh
18:10:57<igli>why so?
18:11:28<chessguy>fasta, what do yhou mean by 'context'?
18:11:46<fasta>@dict context
18:11:46<lambdabot>Supported dictionary-lookup commands:
18:11:46<lambdabot> all-dicts devils easton elements foldoc gazetteer hitchcock jargon lojban vera web1913 wn world02
18:11:46<lambdabot>Use "dict-help [cmd...]" for more.
18:11:59<fasta>@all-dicts context
18:12:01<lambdabot>*** "Context" gcide "The Collaborative International Dictionary of English v.0.48"
18:12:02<lambdabot>Context \Con*text"\, a. [L. contextus, p. p. of contexere to
18:12:02<lambdabot> weave, to unite; con- + texere to weave. See {Text}.]
18:12:02<lambdabot> Knit or woven together; close; firm. [Obs.]
18:12:02<lambdabot> [1913 Webster]
18:12:03<lambdabot>[64 @more lines]
18:12:09<fasta>@more
18:12:09<lambdabot>
18:12:09<lambdabot> The coats, without, are context and callous. --Derham.
18:12:09<lambdabot> [1913 Webster]
18:12:11<lambdabot>
18:12:13<lambdabot>*** "Context" gcide "The Collaborative International Dictionary of English v.0.48"
18:12:15<lambdabot>[59 @more lines]
18:12:26<fasta>Well, anyway, context as it's used in English.
18:12:36<fasta>Not the Haskell concept of context.
18:12:50<chessguy>fasta, i'm not looking for a denotational definition of the wor
18:12:50<chessguy>d
18:12:56<fasta>Read "situation".
18:13:26<fasta>I question whether there is any situation where one would want that that code is accepted by the compiler.
18:13:57<bos>fasta: if a is of type IO something
18:14:27<bos>which would not be unusual at all
18:14:47<bos>or in fact if a is of type Monad m => m something
18:18:46<fasta>One thing I find annoying is that sometimes when you forget an argument, you get back something which compiles, but has some function type in a really weird place. The problem is that coming up with a formal definition of "weird" is difficult without introducing new syntax.
18:19:30<igli>hmm
18:19:50<emu>heya sjanssen
18:20:03<chessguy>yeah, that's when you see things of types like a -> [b] instead of type [b]
18:20:20<chessguy>> foldr (+) [1..10]
18:20:21<lambdabot> add an instance declaration for (Num [t])
18:20:36<chessguy>> foldr 0 [1..10]
18:20:37<lambdabot> add an instance declaration for (Num (a -> [t] -> [t]))
18:20:40<chessguy>wheee
18:21:04<sjanssen>hello emu
18:21:08<roconnor>@hoogle Alpha
18:21:08<lambdabot>Test.QuickCheck.Poly.ALPHA :: type ALPHA
18:21:08<lambdabot>Language.Haskell.TH.Lib.alpha :: [(Name, Name)] -> Name -> ExpQ
18:21:08<lambdabot>Text.ParserCombinators.Parsec.Char.alphaNum :: CharParser st Char
18:21:13<roconnor>@hoogle Alphanum
18:21:14<lambdabot>Text.ParserCombinators.Parsec.Char.alphaNum :: CharParser st Char
18:21:14<lambdabot>Char.isAlphaNum :: Char -> Bool
18:21:29<sorear>(hello)
18:21:37<emu>i managed to get a program to run in 2 seconds, but for some reason i'm stuck with WA (using Prim's)
18:21:38<igli>!hi
18:22:25<sorear>igli: wrong channel
18:22:27<fasta>chessguy: A popular way to "solve" it, often given by people who only write simple programs, is to "add type annotations".
18:22:42<igli>heh sorry sorear :) beg pardon
18:22:48<sorear>np
18:22:55<igli>ACTION hides and listens to code
18:22:59<roconnor>> isAlphaNum ':'
18:23:00<lambdabot> False
18:24:28<gogonkt1>hi,all
18:24:45<sjanssen>emu: did you see that "The sum of all connections is not greater than 2^32-1."?
18:24:53<emu>yes
18:24:55<sjanssen>(ie. use Word)
18:25:08<emu>is that better than Int?
18:25:13<emu>i'm using IntSets and IntMaps too
18:25:49<emu>i mean it runs "fast enough" i don't know why it's incorrect. i can't find any examples where it is wrong.
18:26:02<gogonkt1>How can I handle no-utf-8, e.g. GBK, GB2312 ?
18:26:54<sjanssen>emu: you need the extra precision Word offers
18:27:04<roconnor>gogonkt1: what do you want to do with it?
18:27:20<emu>ugh, Int is signed
18:27:25<sjanssen>Int only gives you 2^31 - 1 -- the problem says it might be as high as 2^32 - 1
18:27:50<roconnor>0::Int64
18:27:51<roconnor>> 0::Int64
18:27:53<lambdabot> 0
18:28:02<gogonkt1>I'm writing a bot read from a room u8, print it in windows control,win is GBK
18:28:16<Syzygy->(2::Int64)^63
18:28:21<roconnor>sjanssen: Int give you a navtive integer size, not necessarily 32 bit.
18:28:25<Syzygy->> (2::Int64)^63
18:28:26<lambdabot> -9223372036854775808
18:28:41<Syzygy->> (2::Int64)^62
18:28:42<lambdabot> 4611686018427387904
18:30:10<gogonkt1>Any module can conver between utf-8 and GBK or other no-utf-8?
18:30:21<bos>gogonkt1: not built-in, no.
18:31:02<sorear>roconnor: Int gives you -2^29 to 2^29-1. Overflow behavior is undefined.
18:31:19<sorear>roconnor: specifically chosen to allow tagged *non-native* formats
18:31:58<gogonkt1>My bot must face this in china, :(
18:33:51<emu>nope :(
18:35:21<SamB>I'm pretty sure Word only gives you 0 to 2^30-1...
18:35:37<emu>> maxBound :: Word
18:35:39<lambdabot> 4294967295
18:35:44<emu>> 2^32 - 1
18:35:45<lambdabot> 4294967295
18:36:02<SamB>emu: I meant that, if Word were in the report, the report would state that as the minimum range
18:36:07<roconnor>sorear: even on a 64 bit machine?
18:36:14<roconnor>that fucking sucks!
18:36:37<igli>ahh
18:36:37<Syzygy->?index Word
18:36:38<lambdabot>Data.Word, Foreign, GHC.Exts
18:36:38<SamB>roconnor: try Int32/Word32
18:36:43<sorear>roconnor: the available size of Int is platform independant
18:36:52<Syzygy->> maxBound :: Word
18:36:52<Syzygy->18446744073709551615
18:36:54<lambdabot> 4294967295
18:36:57<igli>might be 32 bit kerne;
18:36:58<Syzygy->(my box is a 64-bit box)
18:37:01<roconnor>sorear: that's terrible.
18:37:07<SamB>sorear: not exactly...
18:37:20<sorear>roconnor: Remember what I said about undefined overflow behavor.
18:37:23<roconnor>if I wanted platform independence I would have said Int32
18:37:37<roconnor>sorear: oh, right
18:37:57<SamB>roconnor: if it helps, CInt is likely to be 32-bit on 64-bit systems too
18:38:00<roconnor>so you can get maybe 2^64 on a 64 bit machine, maybe.
18:38:11<sorear>> 2^31 -- on dons' 32 bit box, GHC uses 32 bit Int's
18:38:13<lambdabot> 2147483648
18:38:24<roconnor>SamB, I don't want to incoporate C's failings into Haskell.
18:38:31<Syzygy->?index CInt
18:38:32<lambdabot>Foreign.C.Types, Foreign.C
18:38:38<SamB>roconnor: well what exactly do you *want*?
18:38:56<roconnor>I want Int to be the fastest available integer for whatever platform I'm on.
18:38:59<sorear>roconnor: C int can be anything 16 bits or more, again with undefined overflow?
18:39:05<Syzygy->Foreign.C> maxBound :: CInt
18:39:05<Syzygy->2147483647
18:39:07<sorear>roconnor: that's exactly what it is
18:39:08<SamB>roconnor: it should be so
18:39:14<SamB>that is the intent of the Report
18:39:16<roconnor>yay!
18:39:20<SamB>that is the intent of the implementors
18:39:36<roconnor>> bitsize (0::Int)
18:39:37<lambdabot> Not in scope: `bitsize'
18:39:40<roconnor>> bitSize (0::Int)
18:39:42<lambdabot> 32
18:39:58<SamB>and I think that C's int is the same in most contexts
18:40:02<opqdonut>> bitSize (0::Integer)
18:40:04<lambdabot> Exception: Data.Bits.bitSize(Integer)
18:40:07<opqdonut>awww
18:40:19<sorear>hmm, on a trinary computer it would be pretty hard to implement instance Bits Int
18:40:35<SamB>sorear: hmm, yes.
18:40:52<sorear>C's int and Haskell's Int are basically the same, although Haskell requires 30 bits while C only requires 16
18:41:01<SamB>Haskell^XXVI is looking into it
18:41:19<opqdonut>sorear: how come?
18:41:26<Philippa>sorear: "are similarly defined", it's a bad idea to assume that they're the same thing
18:41:30<opqdonut>yep
18:41:47<SamB>Philippa: by "basically the same", he means they are similarly vague
18:41:51<sorear>Philippa: I was talking equivalence of concepts, not sizes, sorry
18:42:07<Philippa>sorear: yeah, just quibbling with the ambiguity :-)
18:42:14<sorear>ok :)
18:46:10<gogonkt1>Are there any project about asia language handle?
18:56:38<roconnor>gogonkt1: I'm not aware of any :(
18:57:19<gogonkt1>Perl do well, but hs ... :(
18:57:41<gogonkt1>Perl do it well, but haskell ... :(
18:59:09<Philippa>gogonkt1: I suspect most of it's contingent on getting our IO story settled - nominally Char is a unicode character, but that's about it so far
18:59:28<Philippa>you might want to talk to people working on GUI lib bindings about how they're handling the issues
19:00:22<gogonkt1>Philippa: good news, Thx! :)
19:01:45<sorear>gogonkt1: there is nothing stopping you from writing your own encoding code in the meantime; implementing UTF8 requires ~10 lines
19:01:45<fasta>"Arguments exhausted after 13 tests." <- this means the 13 tests were distinct?
19:01:57<sorear>yes
19:01:59<nattfodd>fasta: yes
19:02:00<gogonkt1>Why haskell don't let us handle any encoding?
19:02:08<gogonkt1>en, yes
19:02:09<sorear>gogonkt1: it does
19:02:13<Philippa>it does, it just doesn't provide the code to do it for you
19:02:27<sorear>gogonkt1: haskell lets you handle any encoding you want just fine
19:02:28<Philippa>and that's because it's been far from obvious what the right way to do it's been until now
19:02:32<SamB>wow. the PDP-1 had both lower and upper case!
19:02:54<sorear>Philippa: "until now" - you mean someone's finally figured it out?
19:02:56<ddarius>SamB: The wave of the future.
19:03:19<sorear>ACTION waits for mezanine case
19:03:31<gogonkt1>hehe :D
19:03:39<SamB>unfortunately it uses multi-"byte" coding for them...
19:04:26<ddarius>ACTION wonders what sorear means by "mezanine"
19:04:42<Philippa>sorear: heh, you got me. Though at least we've got sufficient power that we know the Right Way ought to be expressible in GHC now
19:05:51<sorear>ddarius: It is a (misspelled) type of floor found between upper and lower ones, not extending the entire width of the building.
19:06:27<ddarius>"We can embed the Calculus of Inductive Constructions into the type system, -surely- we can handle character encoding now... right?"
19:06:33<ddarius>sorear: Yeah, I got that...
19:08:57<DRMacIver>It seems to be a classic Haskell problem that people would much rather work on the cool theoretical stuff than getting the annoying practical details done. :)
19:09:02<Philippa>ddarius: Right Way involves usability as well though - GADTs're a big improvement there
19:10:33<ddarius>DRMacIver: That is not it at all, nor is that actually very typical of the language. It's the classic Haskell problem that people want to do it "the Right Way".
19:11:03<DRMacIver>Fair enough.
19:11:35<ddarius>sorear: Ah. When I look at the context I get what you meant, I thought you were still responding to Philippa.
19:12:11<ddarius>sorear: Incidentally, have you taken a public speaking class?
19:12:21<sorear>No.
19:12:34<ddarius>Does your high school offer one or something similar?
19:12:54<Shimei>So I have a question about Data.ByteString.split. It takes a GHC.Word.Word8, how can I turn a '\n' into a Word8 for this function? I think newer versions of ByteString take Char instead now.
19:13:22<ddarius>@hoogle Char -> Word8
19:13:23<lambdabot>No matches, try a more general search
19:13:34<Saizan>?index split
19:13:34<lambdabot>Data.IntMap, Data.IntSet, Data.Map, Data.Set, GHC.Exts, Language.Haskell.TH.Ppr, System.Random
19:13:38<SamB>Shimei: toEnum . fromEnum?
19:13:54<Saizan>?type Data.ByteString.Char8.split
19:13:56<lambdabot>Char -> Data.ByteString.Base.ByteString -> [Data.ByteString.Base.ByteString]
19:14:49<Shimei>Ah, I see. I have that function. Thanks.
19:15:15<Shimei>SamB: When I tried that it seemed to break something else.
19:20:11<sorear>Shimei: Data.ByteString is for bytes; if your bytestrings logically contain text, you should probably be using Data.ByteString.Char8
19:20:24<sorear>Shimei: which has a readymade 'lines' function
19:20:33<SimonRC>Is there a ghc extention that allows you to specify just part of a type, and let the compiler infer the rest, like "Int -> _ -> [Int]" or whaever?
19:20:56<Igloo>No
19:21:03<SimonRC>odd
19:21:07<SimonRC>I see F# has it
19:21:27<opqdonut>F#?
19:21:56<SimonRC>microsoft's version of ML for .NET
19:22:06<SimonRC>quite good from what I have seen
19:22:39<Philippa>it's largely derived from ocaml
19:22:54<Philippa>looks not bad, but ultimately it's a .NET lang still
19:23:07<ddarius>Which means?
19:23:34<SimonRC>ddarius: exactly what it says?
19:23:38<Philippa>well, probably not too much given that it's also an ML :-)
19:23:44<Philippa>but then I'm a purist, me
19:24:17<SimonRC>plus ML's type syntax is dreadful
19:24:33<centrinia>Would a context-sensitive language parser make sense?
19:24:35<Philippa>you can remove the "type" bit there
19:24:36<ddarius>SimonRC: "it's a .NET language" is perfectly clear, I was asking about the "but ultimately"
19:24:55<ddarius>centrinia: Most are.
19:25:20<Philippa>ddarius: in the long run neither JVM nor CLR can become the One True VM for All Time
19:25:23<sorear>SimonRC: hugs has it
19:25:31<centrinia>Oh. :p
19:25:31<Philippa>and I'm picky
19:25:57<SimonRC>sorear: bah
19:26:02<SimonRC>(mutter, mutter)
19:26:07<centrinia>What about a parser generator for context-sensitive languages?
19:26:29<Philippa>can do
19:26:37<Philippa>depends on the level of context-sensitivity you want
19:26:44<Philippa>combinators're easier
19:26:46<ddarius>I'm not sure that it wouldn't just be easier to write a Turing-complete language at that point.
19:27:04<Philippa>ddarius: it's probably including snippets from one for semantics anyway, no?
19:27:43<ddarius>2-level van Wijnngaarden grammars anyone?
19:27:49<ddarius>s/nn/n
19:28:19<roconnor>Obviously UM is the one true VM.
19:28:27<Philippa>FWIW, I'd still like to write a nearly-arrow-flavoured parsing combinator lib that'd have an optional code generation pass for optimisation
19:28:39<Heffalump>why nearly arrow?
19:28:42<Philippa>roconnor: it can't even /represent/ All Time :-)
19:28:46<Philippa>Heffalump: want identity on computations
19:28:48<centrinia>Just give something like: S -> a b c; S -> a S Q; Q -> b c; and a string such as aabcccc or accbbbb and it'll tell you acceptable and unacceptable respectively. :p
19:29:07<Philippa>it wouldn't be (the equivalent of) ArrowApply, it would be ArrowChoice
19:29:20<Philippa>I could write it as an arrow in an impure lang, I guess
19:29:22<centrinia>Sometimes you don't have identity.
19:29:55<Heffalump>I don't follow.
19:29:59<Philippa>centrinia: like when you're working in Haskell. But the EDSL I'm describing would have it, and it'd be viable because it doesn't do higher-order computation
19:30:23<Philippa>Heffalump: then all the arrow combinators can bake identity into the computations as appropriate
19:30:38<Philippa>or do you not follow why something Arrow-like?#
19:30:44<Philippa>(or why I'd want identity?)
19:31:04<Heffalump>I don't follow why you can't do this with an arrow.
19:31:25<fasta>How can I raise the number of tests in QuickCheck? I already did defaultConfig{configMaxTest = 1000}, but it still is exhausted after 13 to 15 tests.
19:31:38<Philippa>okay. Specifically why I can't do the identity, or what I could do with identity that I couldn't without?
19:31:56<Heffalump>why you can't do the identity
19:32:12<Heffalump>I assume you mean "identity" as in "unique name" rather than "\a -> a"
19:32:16<Philippa>yeah
19:32:24<centrinia>Oh.
19:32:42<Philippa>and the answer is: because the arrow combinators (at least in a pure lang) don't have room for the necessary name supply
19:32:57<Philippa>and if you don't do it at construction time, it's too late
19:33:07<centrinia>isomorphism :: (a -> a) -> (a -> a)
19:33:10<Philippa>you then can't deal with any loops
19:33:32<Heffalump>why not just pass around some state?
19:33:48<Philippa>yeah, but you have to do that when you're building the computations, not within them
19:33:51<centrinia>State? :O
19:33:52<centrinia>State is bad. :(
19:34:12<Philippa>so suddenly you're doing something that's like an arrow built from inside something with state, not an arrow
19:34:13<SamB_XP>hey! google's indexed our wiki again!
19:34:13<ddarius>How about an arrow construction language
19:34:32<Philippa>hmm. You could build it as an arrow transformer constrained to arrows with state
19:34:42<Heffalump>I still don't see why the arrow can't have state in it.
19:34:50<centrinia>Arrows can have state in it? :O
19:34:51<Philippa>it can. It's just that that doesn't fix the problem
19:35:29<sorear>@google listt done right
19:35:31<lambdabot>http://blog.omnigroup.com/2007/05/14/omnifocus-pre-release-early-birds-get-the-bugs/
19:35:31<lambdabot>Title: The Omni Mouth » OmniFocus pre-release: early birds get the bugs
19:35:49<Heffalump>it's not obvious to me why this isn't enough to do loop detection
19:36:13<Philippa>it would be in a strict language
19:36:28<Philippa>on account of any actual loops having fallen over for you neatly
19:36:34<Philippa>...no, wait, it's not
19:36:52<Philippa>not unless you bake in various combinators you wouldn't have to otherwise, anyway
19:37:06<Philippa>so you still don't get loop detection, you just get forced to avoid building any loops in the first place
19:37:26<Philippa>consider many:
19:37:53<Philippa>it calls itself
19:37:58<ddarius>ACTION considers implementing van Wijngaarden grammars.
19:38:04<Philippa>specifically, that loop's a haskell-level loop
19:38:14<Philippa>so the recursion is present in the meta language, if you like
19:38:22<Philippa>in the object language, you don't have recursion: you have an infinite graph
19:38:40<Philippa>having state in the object language doesn't fix it
19:39:09<Heffalump>ok, then how does not being an arrow help?
19:39:41<Philippa>depends on the value of "not an arrow" :-)
19:40:12<Philippa>there still isn't a sufficiently pretty solution in Haskell at the moment
19:40:39<Heffalump>what's the ugly one?
19:41:12<Philippa>build all your computations from inside something stateful, and mercilessly taunt anyone who writes a version of many where the recursion's on the raw haskell level
19:41:58<Philippa>actually, if your value of "something stateful" is the IO monad and you're working with GHC then haskell-level recursion's okay...
19:42:12<Philippa>because then you can use stable names
19:44:01<Philippa>the bonus there is that you only need to build the computation in the IO monad - not its description. So you only need a "runParser" or "compileParser" function in the IO monad
19:44:54<Shimei>So, I've been trying to re-write a script I wrote in ruby in haskell. However, I have been unable to make the haskell perform better than ruby. Anyone see any performance issues here? http://hpaste.org/239
19:45:46<Philippa>centrinia: it sounds like you're in need of an explanation of one of the deeper 'mysteries' of Haskell, namely how things like Arrows and Monads can support state?
19:46:26<Philippa>(also, it's unconstrained state that's bad: if a problem is inherantly stateful, making use of that directly can abstract away further possibilities for error)
19:46:27<Shimei>ACTION wonders if that foldl is performed for every time or memoized
19:46:44<Heffalump>there is no automatic memoisation
19:47:03<centrinia>Yeah, I guess I meant unconstrained state.
19:47:06<Heffalump>of functions, anyway
19:47:13<Heffalump>variables are implicitly memoised as you might expect
19:47:18<SimonRC>I think the rationale is that just about anything can be safely put in a variable if the programmer wants CSE
19:47:38<roconnor>Shimei: my first reaction is that foldl is almost always wrong to use
19:47:40<Philippa>SimonRC: whereas automatic memoisation is potentially unsafe for memory usage
19:47:48<SimonRC>Heffalump: as long as the monomorphism restriction is turned on. If you turn it off you can get a nasty suprise.
19:47:55<Shimei>roconnor: What would be the idiomatic way around that?
19:47:57<Heffalump>you should definitely lift that foldl out
19:48:02<Philippa>centrinia: okay. Want the explanation re monads and arrows?
19:48:17<Heffalump>does =~ fail early?
19:48:27<Heffalump>if so, you should definitely be using foldr.
19:48:32<centrinia>I'll try to read up on it.
19:48:37<centrinia>Thanks for the thought. :)
19:48:48<roconnor>Shimei: foldr in this case, and foldl' in cases where you really want a left fold.
19:48:59<Heffalump>SimonRC: I just adjust my concept of what a "variable" is :-)
19:49:04<Philippa>yeah, I can simplify it without having to explain monads as a whole though, let alone arrows - you're unlikely to get a neat answer to just that question if you read around
19:49:13<roconnor>Shimei: wait
19:49:16<roconnor>maybe I'm wrong
19:49:17<Heffalump>foldl' would be completely inappropriate here, since ++ is not nearly strict enough to help
19:49:27<roconnor>@src concat
19:49:27<lambdabot>concat = foldr (++) []
19:49:33<centrinia>Okay, explain then. :)
19:49:51<Heffalump>is (|) the regex choice operator?
19:49:55<roconnor>Shimei: My inexpert opinion is that you should use foldr here
19:49:57<Philippa>centrinia: okay, supposing I wrote an interpreter for a stateful language in haskell - you'd say that programs run within it exhibit state, right?
19:50:04<Shimei>Heffalump: Yeah, it is.
19:50:08<Heffalump>does it optimise stuff?
19:50:17<Heffalump>if not, why not do the comparisons individually?
19:50:24<centrinia>Yeah.
19:50:35<roconnor>Shimei: and maybe you want concat (intersperse "|" days)
19:50:45<Shimei>Not sure how optimized the regex library is.
19:50:53<roconnor>> concat (intersperse "|" ["foo","bar","baz"])
19:50:54<lambdabot> "foo|bar|baz"
19:51:09<Heffalump>I would certainly try doing the comparisons separately, thus saving the regex library from having to parse stuff.
19:51:10<Philippa>centrinia: okay. Monads and arrows are both related to the idea of programming by interpreting another language within Haskell - only for languages that happen to include haskell as well
19:51:39<roconnor>Shimei: anyhow, you need to profile to find out where you are spending time.
19:52:00<Philippa>in a sense, arrows and monads are one of the more interesting and odd examples of metaprogramming to actually see regular use
19:52:02<Saizan>foldl and ++ are a huge waste anyhow
19:52:15<Philippa>that make sense to you?
19:52:16<centrinia>I never though of them as DSL related. Hmm.
19:52:38<Philippa>Heffalump: as perhaps the on-duty Picky Person, any arguments with what I'm saying?
19:52:44<ddarius>Shimei: Use foldr (and when, though that's not a performance thing)
19:52:48<ddarius>@type when-
19:52:50<lambdabot>parse error (possibly incorrect indentation)
19:52:51<ddarius>@type when
19:52:52<lambdabot>forall (m :: * -> *). (Monad m) => Bool -> m () -> m ()
19:53:09<centrinia>Yeah, it makes sense.
19:53:24<Heffalump>I was wondering whether to argue with your entire premise (about interpreting another language), but it's probably one way of looking at things.
19:53:30<centrinia>So the monad features extend Haskell?
19:54:05<Philippa>centrinia: the only monad 'features' in Haskell are syntactic sugar :-) That's the cute bit
19:54:06<ddarius>Yes and no.
19:54:22<centrinia>Ah.
19:54:30<Philippa>Heffalump: *nod* - sufficiently so that I can 'defuse' monads like Maybe or [] into an AST/interpreter pair
19:55:12<ddarius>Generically no less!
19:55:40<Heffalump>the IO monad extends "pure" Haskell
19:56:12<SimonRC>The list Monad is like having some of the power of Icon available.
19:56:41<Philippa>Heffalump: yeah, fair point - sloppy phrasing on my part
19:57:02<Philippa>but even then, it can be treated as pretty strictly an RTS feature
19:57:16<SimonRC>(or maybe *all* the power of Icon, though I presume that faking Icon's cool bits with the list monad won't *always* work.)
19:57:31<newsham>is there an informal article on concurrency/stm in the wiki?
19:57:48<SimonRC>the IO monad and related stuff is a minilanguage for describing IO actions and similar stuff
19:58:06<Philippa>SimonRC: you'd have to describe Icon's semantics for me to comment, I guess - I won't be surprised if there's another monad or other structure that can do it
19:58:08<ekidd>@tell dons Thanks for your help earlier! I have a few pages of the paper left to write, but the overall structure is clearly visible, and most of the material is there. Whew.
19:58:08<lambdabot>Consider it noted.
19:58:12<ddarius>newsham: Ask Google!
19:58:18<newsham>i did, dd.
19:58:22<Philippa>possibly even just layering transformers on top of list
19:58:22<newsham>i came up empty
19:58:54<Korollary>@tell dons Your belly button sticks out too far.
19:58:54<lambdabot>Consider it noted.
19:58:55<newsham>references to the STM paper, and references to the GHC documentation (which is near nonexistant on stm)
19:59:22<centrinia>Philippa, so ( a >>= b >>= c ) passes the state of a to b, and the state of b to c.
19:59:23<SimonRC>Icon has a "generators" concept, which as far as I can see is very like the nondeterminism given by the list Monad
19:59:41<newsham>generators are also present in python.
19:59:51<newsham>i would think they're more like lazy evaluation than anything else
20:00:01<newsham>coroutines that can yield a value one at a time
20:00:02<Philippa>centrinia: in a stateful monad, yeah
20:00:17<ddarius>newsham: Lazy evalution only leads to one answer being produced.
20:00:26<Philippa>it can be a little more complicated, because sometimes the 'ordering' in a monad is still lazy
20:00:37<centrinia>Ah.
20:00:57<newsham>http://www.thenewsh.com/%7Enewsham/x/machine/lazyFunc.py for example
20:00:57<SamB>ACTION wonders how best to discard the first line of a string...
20:01:06<ddarius>To add expressive power to a language requires a global transformation, monadic style is a global transformation.
20:01:17<ddarius>lines . head . unlines
20:01:27<SimonRC>ddarius: ITYM "tail"
20:01:37<SamB>ddarius: that doesn't seem particularly efficient
20:01:42<ddarius>Er yeah tail
20:01:50<Heffalump>ddarius: monadic style as in changing pure code to be monadic?
20:01:54<ddarius>newsham: Lazy -streams- are not lazy evaluation
20:01:56<SimonRC>or maybe "tail . dropWhile (/= '\n')
20:02:02<Heffalump>(as opposed to introducing do notation, which is purely local)
20:02:04<newsham>ok, perhaps i should have said lazy lists
20:02:06<ddarius>Heffalump: Yes
20:03:06<centrinia>Is it worthwhile for me to play with an arbitrary context sensitive language acceptor by generating more and more strings in the language and comparing with an input string.
20:03:27<centrinia>It will not terminate unless it accepts. :(
20:03:32<SamB>centrinia: is it fun?
20:03:41<centrinia>Yes. :D
20:03:54<ddarius>centrinia: You should be able to get it to terminate either way.
20:04:06<Philippa>yeah, context-sensitive doesn't imply turing-complete
20:04:14<centrinia>Of course.
20:04:24<centrinia>Turing Complete is implied by Chomsky type-0.
20:04:43<ddarius>Eventually the only strings remaining will be longer than the input unless you're going to allow infinite input.
20:04:48<Syzygy->Type 0 is the most constrained of the Chomsky types, isn't it?
20:04:54<Syzygy->ACTION can't remember which way they went...
20:04:56<ddarius>But then it won't accept either...
20:04:56<Heffalump>or an infinite character set
20:05:07<SamB>SimonRC: thanks
20:05:25<SimonRC>SamB: remember, Know Your Prelude
20:05:43<ddarius>Of course, it may as well be non-terminating for as long as it will take on some inputs...
20:05:53<centrinia>Is there an easy way to compare two grammars to see if they produce the same set of strings?
20:06:10<ddarius>Wouldn't that be wonderful.
20:06:17<sorear>centrinia: Yes... for some grammars
20:06:20<centrinia>It would. :)
20:06:25<Philippa>Syzygy-: least constrained
20:06:36<sorear>centrinia: it can be done pretty easily for regular langs, but it undecidable for context free
20:06:38<newsham>anyone familiar with an informal article discussing concurrent programming in haskell?
20:06:50<SimonRC>centrinia: the magic computational class 8-ball says: That problem is NP-hard.
20:06:55<Philippa>sorear: what's the result for unambiguous context free?
20:07:04<opqdonut>SimonRC: :)
20:07:04<SimonRC>I wouldn't trust me though
20:07:16<centrinia>newsham, didn't Simon Peyton Jones write something about STM?
20:07:21<sorear>Philippa: unambiguity is undecidable itself, no need to add equality
20:07:22<newsham>isnt the question of grammar equivalence undecidable?
20:07:25<sorear>(or so WP says)
20:07:41<newsham>centrinia: yes, there's a good, fairly technical, paper on the STM
20:07:49<Philippa>sorear: suppose for a moment that I've found a way to force it...
20:07:51<newsham>i was looking for something less formal and more programmer oriented
20:08:28<Philippa>I guess I should see what theory's been done on PEGs
20:08:39<SimonRC>As a rule of thumb, most problems are either O(1), O(log n), O(n), O(n log n), O(n^2), NP-complete, or undecidable.
20:08:55<ddarius>... ?
20:09:19<sproingie>what about O(n!)
20:09:20<ddarius>Like type checking, or finding the dominators of a graph or... wait
20:09:21<centrinia>ACTION inserts O(n^3) in there from linear algebra schooling.
20:09:28<SimonRC>sproingie: that's rare
20:09:34<Heffalump>what about O(n^2.78) ?
20:09:40<SimonRC>rare too
20:09:40<sproingie>or O(2^n)?
20:09:42<SimonRC>rare too
20:09:47<centrinia>A lot of O(n!) are reducible to O(2^n)
20:09:54<newsham>as a rule of thumb, we usually arent very exact when talking about O(...)
20:09:56<ddarius>O(\alpha(n)n)
20:09:56<sorear>Schoenhage-Strassen!
20:09:56<SimonRC>actully, exponential should be in there too, probably
20:10:02<Philippa>yes, it should
20:10:08<sorear>O(n log n log log n)
20:10:17<centrinia>That's bit complexity. :p
20:10:17<Heffalump>where \alpha = inverse-ackermann?
20:10:26<newsham>sproingie: he did say "NP-complete" didnt he?
20:10:30<ddarius>Yes, but I forget what the whole complexity is.
20:10:38<SimonRC>ddarius: heh
20:10:43<centrinia>The arithmetic complexity of Schoenhage-Strassen is still O(n log n) I think.
20:10:44<SimonRC>ddarius: union-find?
20:10:47<sorear>newsham: the complexity of np-complete problems is not known
20:11:05<Heffalump>most people have a pretty good guess, though :-)
20:11:10<ddarius>SimonRC: As applied to finding the dominators of a graph
20:11:15<centrinia>The log log n is there is supposed to take care of instances where the input integers are on the order of 2^{2^n}
20:11:18<SimonRC>I am assuming that P!=NP, which is true in practice so far even if not actually true
20:11:24<sproingie>i suppose NP covers it
20:11:26<SimonRC>ddarius: yeah
20:11:30<sorear>NPC /= EXPTIME has been proven
20:11:49<centrinia>What????!
20:12:08<centrinia>Is NPC subset EXPTIME?
20:12:18<sorear>Certainly.
20:12:25<centrinia>Hmm.
20:12:36<SimonRC>Actually, undecidable problems are Busy-Beaver-time, but no-one konws what that is, because it's uncomputable.
20:12:49<newsham>because it's uncomputable.
20:12:53<SamB>hehe
20:13:32<newsham>[10:09] < sorear> NPC /= EXPTIME has been proven
20:13:34<newsham>url
20:14:20<SimonRC>(If you could calculate busy-beaver numbers, you could put an upper bound in the running-time of a halting turing machine given its size, which would allow you to tell non-halting machines from ones that just take a very long time.)
20:16:06<sorear>newsham: Forgot the "Says WP" qualifier
20:16:19<newsham>wp?
20:17:37<sorear>Says a MISREADING of WP at that. Sorry.
20:17:41<sorear>wikipedia
20:17:52<ddarius>newsham: sorear has a problem of talking in acronyms
20:18:20<sorear>ACTION managed somehow to read that as "talking in oranges"
20:19:20<sorear>hmm. there is an undecidable problem with a scalar answer
20:19:35<Heffalump>heh. I was reading WP too and trying to figure out where it was incorrect given what sorear had said :-)
20:19:51<SimonRC>sorear: define "scalar answer"
20:19:53<sorear>some of the BB numbers are computable; for these there exists a proof BB(k) = foo
20:19:59<sorear>SimonRC: not an infinite list
20:20:05<sorear>or similar
20:20:12<sorear>within a space of size omega
20:20:37<SimonRC>but every list, pair, etc is a scalar!
20:20:53<SimonRC>see: Gödel's work
20:20:58<newsham>NP-complete == exp except its not, except it really is (except its not)
20:21:06<SimonRC>newsham: heh
20:21:06<sorear>now, suppose ALL of the BB numbers were computable. then by enumerating proofs, you would have a TM which generates all the bb numbers
20:21:40<sorear>by contradiction, there exists some BB numbers which cannot be decided. pick one, by the well ordering of N
20:22:03<pejo>sorear, how do you mean some BB numbers are computable?
20:22:31<Philippa>pejo: that it can be proven that they're what we think they are
20:22:32<sorear>pejo: For some of the numbers, we've been able to compute them
20:22:57<sorear>hello ndm
20:23:16<pejo>sorear, for anything larger than 4?
20:23:18<ndm>hi sorear
20:23:43<sorear>pejo: Right. We haven't been able to compute them all
20:23:52<sorear>pejo: ANd there is no general way to do it
20:24:38<SamB>ACTION wonders why alex's "monad" wrapper doesn't report positions with errors...
20:24:39<sorear>pejo: but if you could prove <for all K, there exists a number N and a proof of BB(K)=N>, then there would exist a simple (arbitrarily slow!) algorithm for enumerating BB's
20:24:56<ndm>BB's?
20:25:01<pejo>ndm, busy-beaver
20:25:01<SimonRC>Can all mathematical proofs be turned into termination proofs?
20:25:05<sorear>pejo: ergo, !<for all K, there exists a number N and a proof of BB(K)=N>
20:25:28<sorear>pejo: ergo, <exists K. not exists (N, proof of BB(K)=N)>
20:25:29<newsham>irc channel finds proof for century old problem in 5 minutes. news at 11.
20:25:51<ndm>SimonRC: most can
20:26:23<Philippa>SimonRC: I imagine constructivist ones can?
20:26:31<sieni>SimonRC: In what sense?
20:26:36<sorear>SimonRC: All can. Theorem proof is semidecidable, so P is provable == prover(P) terminates
20:27:06<ndm>you can also encode them all as potential pattern match errors
20:28:15<centrinia>Would anyone disagree with me if I conjecture that an 3-CNF encodable with O(n) bits should not be equivalent to any DNF with O(2^n) bits?
20:28:45<kaol>> if all (\(xy,z) -> xy /= z) [(x^n+y^n, z^n) | n <- [3..], x <- [1..], y <- [1..], z <- [1..]] then True else False
20:28:51<lambdabot>Terminated
20:29:03<centrinia>Terminated!
20:29:24<sorear>centrinia: Absolutely. I think you used the wrong quantifier for the second 'any'
20:29:35<centrinia>Sorry, remove the O( ) in my statement. :)
20:29:45<ndm>if ... then True else False == ...
20:29:48<ddarius>\b -> if b then True else False = id
20:29:58<ndm>DrHaskell picks that one up :)
20:30:50<sorear>centrinia: What you said parses as a restriction of: forall a. forall b. a == b
20:30:56<Heffalump>ddarius: that's a bit stricter
20:31:20<centrinia>I guess I should have said, "a 3-CNF with n terms should not be equivalent to any DNF with O(2^{2^n}) ".
20:31:21<ndm>Heffalump: you sure about that?
20:31:30<ddarius>id is strict
20:31:38<Heffalump>oh yeah, duh
20:31:40<Heffalump>sorry :-)
20:31:58<ndm>we really do need a
20:32:11<ndm>equational reasoner for haskell, just like the one demo'd at least years HW
20:32:49<sorear>centrinia: (a|b|c) & (a|b|c) & (a|b|c) is == to (a) | (b) | (c) disproof.
20:32:50<Saizan>ndm: is there a way to write a relaxed comparison for the attributes of a TagOpen in tagsoup? like ~== TagOpen "a" [("href","?cat=")] that matches <a href="?cat=w"> for any string w? or i just have to extract the attribute and check by myself?
20:33:15<centrinia>Oh.
20:33:20<ndm>Saizan: there is no wildcard support in the patterns, yet
20:33:26<centrinia>I should not have used big O notation.
20:33:42<ndm>Saizan: adding a regular expression thingy to it would be a sensible step forward, if Haskell had a reliable and cross-compiler regexp library
20:34:18<Philippa>ndm: would parameterising on a matcher be viable?
20:34:32<sorear>ndm: does yhc support libraries yet?
20:34:36<Philippa>assume that the matcher determines the pattern type
20:34:44<centrinia>Isn't the upper bound on the size of the corresponding DNF of an n term 3-CNF supposed to be O(2^{2^n})
20:34:48<ndm>Philippa: its already basically parameterised on the matcher
20:35:14<ndm>Philippa: the matcher is a HOF
20:35:16<Saizan>(~==) :: (TagComparison a) => Tag -> a -> Bool
20:35:27<ndm>sorear, not really
20:35:40<ndm>oh, thats even more parameterisable :)
20:36:08<ndm>i haven't looked at tagsoup in a while, people send me patches, i apply blindly
20:36:21<Saizan>heh, i thought regex-base was fairly standard
20:36:40<ndm>doesn't work on Hugs at all
20:40:58<ndm>sorear, the libraries support should be doable, actually - it doesn't support cabal, just if you have a directory under packages it will look their for libraries
20:50:46<gwern>I'm having a bit of a senior moment here - given a tagsoup list with entries like 'TagText "NGE",TagClose "i",TagText ", ",TagOpen "a" [("href","/wiki/Gainax"),("title","Gainax")]', how I do match on just ones starting with TagOpen "a"? I want to say something like 'match TagOpen "a" _ = True", but that doesn't seem to work
20:52:53<sorear>match (TagOpen "a" _) = True
20:53:16<sorear>patterns are like expressions, and apposition is infixl 10
20:53:16<gwern>why are the parentheses needed?
20:53:40<gwern>'apposition'?
20:54:01<sorear>because declaration tries to mirror use, and in usage match (TagOpen "a" foo) is completely different from match TagOpen "a" foo
20:54:04<ndm>~== TagOpen "a" []
20:54:08<ndm>or isTagOpenName "a"
20:54:10<ndm>i think
20:54:11<sorear>application by juxtaposition
20:54:23<ndm>its been too long since i looked at how tagsoup works...
20:54:32<gwern>ndm: didn't you write tagsoup?
20:54:39<ndm>gwern: yes...
20:55:01<ndm>gwern: but i've accepted quite a lot of patches since then, and not looked at it for a while
20:55:05<gwern>sorear: oh. I think I see. so without the parentheses it looks like I'm trying to do something, but with the parentheses it looks like a pattern?
20:55:26<gwern>ndm: I'm currently whacking on the googleTechNews example so I can get a list of http links out of wikipedia articles
20:55:29<sorear>gwern: without the parenthesis it looks like three patterns
20:55:47<gwern>ok. that does make a certain sense
20:55:50<ndm>gwern: that should be just a minor tweak to the googleTechNews example, i think?
20:56:41<marcusf>hey, a newbie-question: I'm working through YAHT, and battling with an excercise about data-types. I've defined a datatype Tuple = Single a | (...) | Quad a b c d, and now I'm to write a function Tuple1 :: Tuple a b c d -> Just a. I've no clue at all about how it should look. Any helpers?
20:56:45<gwern>ndm: mm. it's proving harder than I expected. I'm sort of close to the end, though, I think
20:56:52<marcusf>am I all wrong here?
20:56:53<ekidd>gwern: Depending on exactly what you're doing, you might also be interested in downloading all of Wikipedia and processing it offline.
20:57:04<Cale>marcusf: It should pattern match against each of the cases
20:57:14<Cale>So it will look like:
20:57:15<chessguy>all of wikipedia? wouldn't that be huge?
20:57:20<Cale>tuple1 (Single x) = ...
20:57:30<Cale>...
20:57:33<gwern>ekidd: oh, I am very familiar with the database dumps. more than I want to be
20:57:37<Cale>tuple1 (Quad x y z w) = ...
20:57:40<marcusf>Cale: So I need to write tuple1 (Single a) = Just a, ..., tuple1 (Quad _ _ _ d) = Just d
20:57:42<ekidd>marcusf: You want to name it tuple1, not tuple1. :-)
20:58:01<gwern>ekidd: once I get it working in the googleTechNews example, I'm going to rewrite it to use interact so I can pipe through the XML article dump
20:58:11<ekidd>chessguy: Yeah. But there's no other data set like it, unless you grab the entire web like Google.
20:58:17<gwern>chessguy: it depends on what you want of Wikipedia
20:58:17<Cale>marcusf: That may be a type error -- I think you want the first of the 4 values.
20:58:29<Cale>marcusf: but essentially, yes
20:58:31<marcusf>Cale: Ofcourse, thanks. just a typo
20:58:33<chessguy>ermm, why is it returning a Maybe a then?
20:58:45<ekidd>I mean, all the links between all that knowledge. Fun with data mining!
20:58:55<gwern>chessguy: the full SQL dump is like 80 gigs and that's the really really compressed version. and let's not even talk about getting a dump of Commons/en's multimedia
20:59:13<chessguy>only 80 gigs? that's not as bad as i thought
20:59:34<Cale>chessguy: presumably there will be a tuple2 and so on
20:59:34<chessguy>Lemmih!
20:59:44<Lemmih>chessguy!
20:59:45<chessguy>Cale, oh, duh
20:59:48<gwern>chessguy: it uncompreses to somewhere around 200gigs, I think
21:00:01<sorear>chessguy: the current content of WP uncompresses to 4gigs
21:00:14<gwern>heck, just mainspace's articles in XML when compressed is a good 2 gigs and change
21:00:18<ekidd>gwern: That's still pretty small. I saw a 750GB external drive for $199 in a store recently...
21:00:34<sorear>chessguy: the 200gigs figure includes archive pages, which pretty much nobody wants
21:00:35<gwern>sorear: you sure? I was pretty sure the mainspace uncompressed to around 8 gigs
21:01:08<gwern>sorear: mirrors would want that. I know the internet archive uses the archive dumps
21:01:12<sorear>hmm. no, I'm not sure at all
21:01:16<sorear>in fact:
21:01:17<sorear>-rw-r--r-- 1 stefan stefan 19G 2007-04-08 19:48 /var/cache/stefan-downloads/enwiki-20070402-pages-meta-current.xml
21:01:47<gwern>ah, it's including the non-article space stuff as well?
21:02:00<sorear>yeah, that file includes Talk: foo etc
21:02:05<ekidd>sorear: 19G? That's not bad at all.
21:02:28<ekidd>OK, time to stop procrastinating and go back to paper writing. :-)
21:04:48<shapr>yay!
21:04:48<lambdabot>shapr: You have 1 new message. '/msg lambdabot @messages' to read it.
21:04:59<sorear>What's the standard symbol for return types (eg in CPS) - I know you use 'r' when you are restricted to Latin
21:07:58<ddarius>r or a or whatever you want
21:08:35<ddarius>It depends. Are you talking about a monomorphic return type of "answers" or an quantified type variable?
21:08:54<sorear>snd
21:08:59<ddarius>Either way, there is no special treatment usually.
21:09:13<sorear>ok
21:28:46<ndm_>sorear, is that CPS question related to anything i'm writing?
21:30:39<ddarius>ACTION randomly darcs pulls xmonad
21:32:41<wolverian>error, not enough interesting haskell posts in my google reader
21:33:12<ndm>wolverian: i assume you are already RSS'ing planet?
21:33:18<wolverian>yup
21:33:43<ndm>you could always write an interesting post
21:34:05<sorear>ndm: No.
21:34:07<wolverian>I'm better at reading
21:34:25<wolverian>hm. aldor looks like an interesting language. too bad it's not free.
21:34:30<sorear>ndm: I'm writing hmenu, and having a little too much fun with lhs2TeX
21:34:50<ndm>sorear: what is hmenu, and why are you using lhs2tex?
21:35:07<ndm>i only use lhs2tex for papers and stuff, other stuff is much more pleasant in HTML
21:35:34<sorear>a haskell menu program, and uh ... uh ... uh ...
21:36:08<ndm>ala dmenu?
21:36:25<sorear>very different
21:36:33<ndm>same purpose?
21:36:39<sorear>similar
21:36:56<sorear>definitely intended to work with xmonad :)
21:37:09<jcreigh>sorear: oh, nice. How does/will it work?
21:37:22<ndm>yeah, i had wondered why people hadn't started cloning the things xmonad cooperates with closely
21:37:40<sorear>jcreigh: code or ui?
21:37:41<jcreigh>ACTION notes that not *every* existing tool is broken. :)
21:37:47<jcreigh>sorear: UI wise
21:38:04<ndm>ACTION notes that won't stop someone from rewriting everything in Haskell
21:38:25<jcreigh>Touché
21:38:27<sorear>jcreigh: pops up in the center of the screen, allows mouse and kb usage, 1 level at a time
21:39:03<ndm>ACTION remembers menu systems like that from Lotus 1-2-3 for DOS
21:39:14<sorear>ACTION doesn't :(
21:39:18<ndm>apart from the mouse usage of course
21:40:33<ndm>do these Haskell versions not take up more memory than C versions?
21:41:19<sorear>ndm: Suprisingly, no.
21:41:38<jcreigh>xmonad seems to take up an amount of memory comparable to dwm. (Maybe due to xlib overhead in both cases?)
21:41:39<ndm>i know Gtk2Hs programs are horrible compared to C programs using the Windows API
21:41:54<ddarius>That's understandable.
21:42:00<sorear>ndm: Xlib contains enough data-segment bloat to dwarf the GHC RTS
21:42:22<ddarius>xmonad doesn't build for me anymore. I think I need a newer xlib
21:42:23<ndm>ddarius: but means i still have to do C coding against the Win32 API, which is uber-ugly
21:42:50<ddarius>What about using the Win32 API in Haskell?
21:43:18<ndm>ddarius: that sounds extra painful, using a half-implemented API which is completely mis-designed for the language...
21:43:20<wolverian>Nanar, how about using another language's gtk bindings?
21:43:25<jcreigh>ddarius: you probably need a newer x11-extras
21:43:39<Nanar>wolverian: ?
21:43:42<ddarius>It was one of those things.
21:44:02<ndm>wolverian: i think its as much gtk, as it is gtk2hs - i'd rather not use gtk at all
21:44:11<wolverian>Nanar, sorry, that was to ndm :)
21:44:13<Nanar>wolverian: I suspect a completion typo, because I am begginer with haskell ;)
21:44:36<Nanar>wolverian: no pb, that happen often, include me
21:44:42<wolverian>ndm, gtk isn't supposed to be a horrible memory hog, certainly. please submit bugs if you spot bad offenses :)
21:45:06<ndm>wolverian: on Windows, its a lot slower than win32 api, and doesn't "respond" as quickly, very subjective
21:45:21<wolverian>I can believe that.
21:45:31<wolverian>though I have used gaim on win32, and it seemed ok.
21:45:33<ddarius>Ah the README warns of exactly that.
21:45:37<wolverian>er.. pidgin
21:53:45<ddarius>Not that it's hard to figure out, but it would probably be beneficial to list the addresses of the X11-extras darcs repository somewhere.
21:54:17<sorear>ndm: Note, there is no graphical Debian-type menu program compatible with xmonad.
21:54:42<ndm>sorear, i'm sure whatever you come up with will be the one to use :) - i'm just curious why the use of lhs2tex...
21:55:00<ndm>but i don't think i'll be moving to xmonad until you've made your windows port
21:55:00<sorear>it's easier to read that way!
21:55:12<ndm>the manual for hmenu?
21:55:16<ndm>or hmenu itself?
21:55:19<sorear>snd
21:55:52<ndm>hmm, now i am curious
21:59:59<gwern>hey, ndm I think I've finally got the link-extractor right
22:00:10<gwern>probably should filter out the internal WP links though
22:00:51<ndm>yay!
22:01:47<hpaste> gwern pasted "tagsoup - getting a list of URLs" at http://hpaste.org/240
22:06:06<hpaste> gwern annotated "tagsoup - getting a list of URLs" with "modify wp to remove internal links" at http://hpaste.org/240#a1
22:06:31<gwern>...oh dear. that's not quite right
22:07:21<ndm>hmm, looks like a list comp could really cut out the two maps
22:07:37<gwern>ndm: do you know what I'm doing wrong? It's filtering admirably, but an entire wiki page stuffed with links to other websites is only producing '["","http://wikimediafoundation.org/wiki/Fundraising","http://wikimediafoundation.org/wiki/Privacy_policy"]' when run through
22:07:38<lambdabot>http://wikimediafoundation.org/wiki/Fundraising","http://wikimediafoundation.org/wiki/Privacy_policy"]'
22:07:57<ndm>gwern: my knowledge of tagsoup is rather limited...
22:08:06<gwern>ndm: oh, I don't doubt list filters could improve it, but correctness first and then readability
22:08:24<Saizan>gwern: why not filter (~== TagOpen "a" []) tags instead of filter (isTagOpen) $ concat $ sections (~== TagOpen "a" []) tags ?
22:08:26<ndm>gwern: often readability makes the subtle bugs more obvious
22:08:27<gwern>ACTION would like to note ndm has considerably more understanding than myself
22:09:25<Saizan>concat . sections seems just a waste
22:09:30<gwern>Saizan: I think that was because of the deuced nesting of tags within tags
22:09:49<ndm>[b | TagOpen "a" [(a,b),_] <- tags, "http://" `isPrefixOf` b]
22:09:51<Saizan>deuced?
22:09:58<ndm>does that not do what you want?
22:10:15<gwern>ndm: I'll take a look
22:10:33<ndm>gwern: i think the nub, sections and concat are cancelling each other out
22:10:34<gwern>Saizan: yes, a more mild curse than d-mned and company
22:11:17<ndm>oh, you are requiring tags to have exactly two attributes
22:11:25<ndm>my guess is that is why some tags get skipped
22:11:43<Saizan>i'd use lookup "href" anyway
22:11:43<ndm>[x | TagOpen "a" atts <- tags, (_,x) <- atts, "http://" `isPrefixOf` x]
22:12:03<gwern>yeah, I guess my 'match _' is doing that, since I was looking for the (href, "http://...") pair
22:12:19<ddarius>[x | TagOpen "a" ((_,x):_) <- tags, ...
22:12:22<ndm>you don't mention href
22:13:05<gwern>wasn't sure how to mention it
22:13:10<ndm>i think there is a lookup attribute function, but not sure what it is
22:13:33<Saizan>fromAttrib :: String -> Tag -> String
22:14:01<Saizan>crashes on non-TagOpen, and returns [] if the attribute is not found
22:14:34<ndm>my haddocks obviously aren't updating themselves properly
22:14:40<ndm>i'll try and get that fixed tomorrow
22:14:41<gwern>near as I can tell, let links = [x | TagOpen "a" atts <- tags, (_,x) <- atts, "http://" `isPrefixOf` x] would work
22:15:29<ndm>should do
22:15:32<gwern>I don't see fromAttrib in http://www.cs.york.ac.uk/fp/haddock/tagsoup/Data-Html-TagSoup.html no wonder it didn't seem too helpful
22:15:34<lambdabot>http://tinyurl.com/ywpexa
22:15:52<ndm>gwern: the docs are out of date, i'll fix them monday - although they should be done by cron once a day
22:15:57<Saizan>ACTION darcs getted and runghc Setup haddock
22:16:32<gwern>ACTION nods. I see. no big hurry I guess
22:17:27<ndm>http://www.cs.york.ac.uk/fp/haddock/tagsoup/tagsoup/
22:17:36<ndm>thats where the correct documentation is...
22:17:42<ndm>must have screwed up the copying over script
22:20:41<ndm>fixed :)
22:20:45<DRMacIver>Bleh. Trying to emulate Haskell in Java makes me sad inside.
22:22:29<Korollary>imagine how java feels
22:22:44<DRMacIver>It deserves it.
22:22:45<ddarius>sad outside?
22:23:08<MyCatVerbs>DRMacIver: but it's a good excuse to give all your classes really snarky and insulting names.
22:23:19<Korollary>that's unprofessional
22:23:36<MyCatVerbs>DRMacIver: class TheOtherSecondClassFunction extends IHateYouMisterMcNealy
22:23:54<Korollary>McNealy didnt hold a gun to our heads
22:23:59<Korollary>you hate your management
22:24:19<DRMacIver>Believe it or not, this isn't work code.
22:24:21<MyCatVerbs>Wait, no, if we're looking to reimplement Haskell idioms in Java, that should be class SecondClassFunction implements DamnYouAllToHell.
22:24:38<Korollary>ooh. s&m action
22:25:24<DRMacIver>Actually mostly what I'm tring to emulate is laziness and having recursion optimised in a sensible manner.
22:25:53<DRMacIver>I've suffered enough without defining FunctionN interfaces. :)
22:26:44<Korollary>use scala maybe. or get some aspirin.
22:27:10<ndm>DRMacIver: why? if not for work, why use java?
22:27:49<hpaste> gwern annotated "tagsoup - getting a list of URLs" with "Cleaned up version of tagsoup program" at http://hpaste.org/240#a2
22:27:54<DRMacIver>I increasingly find I don't have a good answer to that question.
22:28:21<DRMacIver>Normally the answer is "Libraries". In this case it's "This was a proof of concept which I didn't realise when I embarked upon it that I'd be trying to write it like Haskell"
22:29:01<DRMacIver>Plus practice at abusing Java helps for work related stuff. :)
22:29:16<DRMacIver>(But that's a justification more than a reason)
22:29:41<hpaste> ndm annotated "tagsoup - getting a list of URLs" with "never have IO [()]" at http://hpaste.org/240#a3
22:29:53<gwern>ndm: is it bad style?
22:30:06<ndm>gwern: usually it means you want to use mapM_ instead
22:30:44<ndm>gwern: only build up a complex IO result if you need it, or if its easier - in this case the use of mapM_ is more efficient (much more) and shorter
22:30:53<ndm>mapM_ is tail recursive, mapM isn't, i think
22:31:15<gwern>oh. didn't know that it made a difference, effiency wise
22:31:34<gwern>ndm: wait, I remember reading a long thread on haskell-cafe about how tail recursion doesn't really matter in haskell...
22:32:15<ndm>gwern: it doesn't really mean what it used to mean in haskell, but mapM_ is quite a bit more efficient than mapM - but of course just use the one that fits your purpose best - which is mapM_
22:32:21<ndm>saves you that return () at the end
22:32:52<ddarius>gwern: Tail recursion still matters, but you have think about it differently. Haskell is not just a lazy language.
22:33:03<hpaste> ndm annotated "tagsoup - getting a list of URLs" with "shorter" at http://hpaste.org/240#a4
22:33:38<gwern>well, I don't really mind. it cuts off a line and a pair of brackets at the expense of another underscore, so it's a good buy length-wise
22:34:59<gwern>anyway, thanks for the help ndm
22:37:23<ndm>gwern: no probs, glad tagsoup is being of use
22:38:29<gwern>sure beats hacking together something with the old unix shell tools
22:38:46<gwern>ACTION tries not to think about how complex a regexp for matching http links would be
22:38:58<gwern>ndm: tagsoup would also work on xml, right?
22:40:08<ndm>gwern: it sees tags, be them xml, html or otherwise
22:40:35<gwern>ok. I was just musing about piping in the WP XML database dump
22:42:15<ndm>should be just fine
22:42:31<ndm>although i've not looked at the tagsoup code for a while... i know its definately lazy
22:44:52<Saizan>mmh class Match a where match :: String -> a -> Bool with instances String, newtype Prefix = Prefix String, and (String -> Bool) might be nice for wildcard patterns..
22:45:23<sorear>you shouldn't need tagsoup for valid XML
22:45:23<lambdabot>sorear: You have 2 new messages. '/msg lambdabot @messages' to read them.
22:45:28<sorear>@messages
22:45:28<lambdabot>kosmikus said 31m 1s ago: I'm afraid it's difficult to change -- I'm very reluctant to change the underlying formatting routine because it would affect all old documents.
22:45:29<lambdabot>kosmikus said 30m 8s ago: you can always work around such formatting problems if you're willing to use lhs2TeX as a preprocessor for both LaTeX and Haskell itself
22:45:53<ndm>sorear, you might not need tagsoup for valid xml, but when it comes to extracting all the links etc, it can often be faster to write and to run
22:46:00<SamB>ACTION wonders why happy produces superfluous states
22:46:15<sorear>it's state-happy?
22:46:19<ndm>SamB, are you 100% sure they are superfluous?
22:46:30<ndm>SamB, the states required changes as the actions are added/removed to productions
22:46:59<ndm>you have to remember that LALR(1) is incredibly fragile
22:50:50<gwern>are there any functions for printing strings which are lazy?
22:50:58<SamB>unreferenced states are probably not required for anything...
22:51:59<Saizan>it's quite hard to print a string without forcing it..
22:55:13<sorear>gwern: all of the standard string printing routines will print the beginning before computing the end
22:56:12<ndm>gwern: if you turn off buffering, you may see the behaviour more clearly
22:56:16<ndm>@hoogle setbuffering
22:56:17<lambdabot>IO.hSetBuffering :: Handle -> BufferMode -> IO ()
22:59:44<gwern>ok.
23:00:09<gwern>another question: I know how to import particular typeclasses and functions, but what's the syntax for importing a data constructor?
23:00:34<ddarius>The same.
23:00:54<ddarius>Sorry, TypeConstructor(DataConstructor)
23:01:25<gwern>hmm.
23:08:13<kpreid>and TypeConstructor(..) imports all of the data constructors
23:08:15<emu>sigh
23:13:52<MyCatVerbs>emu: ennui much?
23:15:55<emu>just frustration
23:24:49<fasta>@where haskell-v8
23:24:50<lambdabot>I know nothing about haskell-v8.
23:25:08<fasta>What is haskell-v8?
23:25:34<sorear>nothing, afaik
23:25:47<fasta>http://darcs.complete.org/haskell-v8/ <- it's that
23:25:49<lambdabot>Title: Index of /haskell-v8
23:26:05<sorear>complete.org is CosmicRay's site
23:26:11<chessguy>haskell for vegetarians?
23:26:15<fasta>sorear: I know
23:26:29<fasta>I just found something on my harddrive and wondered wth it was :)
23:26:55<sorear>it looks like some random project of his.
23:26:57<sorear> @ask
23:27:27<chessguy>@pl pH = p (h s)
23:27:27<lambdabot>pH = p (h s)
23:27:32<fasta>sorear: AFAIK, the idea was to write some book on Haskell
23:28:58<Baughn>> let ($) = (*) in 2 + 3 $ 4
23:29:00<lambdabot> 14
23:29:32<Baughn>> let a ($) b = a * b in 2 + 3 $ 4
23:29:33<lambdabot> Occurs check: cannot construct the infinite type: t = t2 -> t -> t1
23:29:33<lambdabot> ...
23:29:53<Baughn>> let a $ b = a * b in 2 + 3 $ 4
23:29:54<lambdabot> 14
23:30:07<chessguy>hmm. http://darcs.complete.org/haskell-v8/monads-v8.txt looks interesting
23:30:27<Baughn>I'd have expected 20. Oh well..
23:41:18<chessguy>@seen cosmicray
23:41:18<lambdabot>I haven't seen cosmicray.
23:53:29<int-e>> let infixr 0 $; ($) = (*) in 2 + 3 $ 4
23:53:30<lambdabot> 20
23:53:56<fasta>How do you make your backups of your homedir?
23:54:12<fasta>(including source code, etc)
23:54:33<fasta>All the GUI programs assume that the user has ordered his data perfectly.
23:55:35<fasta>Writing it directly against cdrecord would take quite some time, I think.
23:58:21<Baughn>fasta: rsync. ;)
23:58:51<Baughn>int-e: Right. I'm just surprised that 0 isn't the default.

Back to channel and daily index: content-negotiated html turtle