00:00:00 --- log: started haskell/06.08.22 00:00:36 @vixen Please empty your pockets before going through the metal detector. 00:00:36 i like that type of music too 00:00:47 Not that kind you dufus 00:13:34 Does anyone have any good solutions that they use for organizing pdfs/papers? I've downloaded a ton, and my method of dumping them in a vague directory hierarchy is becoming a bit unwieldy. 00:14:24 dolio, www.citeulike.org 00:14:39 dolio: hm not really, same problem here. I try to change the pdf file names into the title of the papers. maybe I should look into beagle 00:15:48 pejo: Hmm, interesting. Thanks. 00:16:03 dolio, or just a big pile on your desk. :-) 00:16:29 Heh. 00:24:21 --- join: Cheery (n=Cheery@a81-197-19-23.elisa-laajakaista.fi) joined #haskell 00:26:12 --- join: johnnowak (n=johnnowa@207-38-204-65.c3-0.wsd-ubr2.qens-wsd.ny.cable.rcn.com) joined #haskell 00:28:23 --- join: iblechbot (n=iblechbo@62.216.198.47) joined #haskell 00:28:53 dons: i'm having some local lambdabot problems 00:29:11 yeah? 00:29:30 dons: it just prints "Initialising plugins ......." and then exits with exitcode 1 00:29:41 remove State/seen 00:29:44 and try again 00:30:07 yay, it works 00:30:10 --- quit: johnnowak (Client Quit) 00:30:11 :) 00:30:15 --- join: johnnowak (n=johnnowa@207-38-204-65.c3-0.wsd-ubr2.qens-wsd.ny.cable.rcn.com) joined #haskell 00:30:16 how do i turn of a module? 00:30:22 (or remove it) 00:30:31 remove it from the list in Modules.hs and recompile 00:30:55 that was easy... 00:32:08 and it works :) 00:32:14 @karma+ dons 00:32:14 dons's karma raised to 51. 00:32:41 Yikes, that's a lot of karma. 00:32:49 sure is 00:32:51 ?karma-all 00:32:51 dons 51 00:32:52 shapr 21 00:32:52 xerox 21 00:32:52 lambdabot 20 00:32:52 Lemmih 19 00:32:52 You're coming back as something really awesome. 00:32:53 [212 @more lines] 00:32:59 :S 00:33:01 @more 00:33:01 dcoutts 18 00:33:02 int-e 14 00:33:02 Cale 12 00:33:02 musasabi 12 00:33:03 SamB 10 00:33:05 [207 @more lines] 00:33:06 @karma 00:33:10 You have a karma of 1 00:33:13 @karma 00:33:13 You have a karma of 3 00:33:13 @karma 00:33:14 You have a karma of 0 00:33:15 @karma 00:33:16 You have a karma of 0 00:33:18 :-( 00:33:29 @karma+ sieni 00:33:29 sieni's karma raised to 1. 00:33:30 woohoo, positive karma :) 00:33:33 Happy now? 00:33:39 ^_^ 00:34:02 --- join: roconnor (n=roconnor@g33218.upc-g.chello.nl) joined #haskell 00:34:04 --- quit: noclouds (Read error: 110 (Connection timed out)) 00:34:16 --- quit: Evi1M4chine (Read error: 104 (Connection reset by peer)) 00:34:25 --- join: Evi1M4chine (n=Miranda@dsl50-223.pool.bitel.net) joined #haskell 00:34:56 --- join: noclouds (n=mhfan@60.166.39.122) joined #haskell 00:36:06 --- join: slipstream-- (n=slipstre@ppp85-140-76-70.pppoe.mtu-net.ru) joined #haskell 00:41:03 --- quit: slipstream (Read error: 60 (Operation timed out)) 00:41:47 --- join: kep (n=const@nat-175-12.yapic.net) joined #haskell 00:41:47 --- quit: Pseudonym ("using sirc version 2.211+ssfe") 00:44:11 --- quit: boliver (Remote closed the connection) 00:45:52 --- quit: kep (Client Quit) 00:46:50 --- join: SSelva (n=ssaranga@c-24-6-134-152.hsd1.ca.comcast.net) joined #haskell 00:49:36 --- quit: JohnMeacham (Read error: 60 (Operation timed out)) 00:50:06 --- join: tibbe (i=tibbe@cupcake.dreamhost.com) joined #haskell 00:52:06 --- quit: Evi1M4chine (Read error: 104 (Connection reset by peer)) 00:52:14 --- join: Evi1M4chine (n=Miranda@dsl50-223.pool.bitel.net) joined #haskell 00:54:00 --- join: JohnMeacham (n=JohnMeac@adsl-69-231-206-149.dsl.irvnca.pacbell.net) joined #haskell 00:55:13 --- join: Cheer1 (n=Cheery@a81-197-19-23.elisa-laajakaista.fi) joined #haskell 00:55:51 --- quit: Cheery (Read error: 110 (Connection timed out)) 00:59:47 --- join: mnislaih (n=pepe@25.Red-88-2-154.staticIP.rima-tde.net) joined #haskell 01:01:07 --- quit: Evi1M4chine ("Miranda IM! Smaller, Faster, Easier. http://miranda-im.org") 01:01:21 --- join: Evi1M4chine (n=Miranda@dsl50-223.pool.bitel.net) joined #haskell 01:01:40 --- quit: Evi1M4chine (Client Quit) 01:01:49 --- join: Evi1M4chine (n=Miranda@dsl50-223.pool.bitel.net) joined #haskell 01:02:01 --- quit: Evi1M4chine (Read error: 104 (Connection reset by peer)) 01:02:11 --- join: Evi1M4chine (n=Miranda@dsl50-223.pool.bitel.net) joined #haskell 01:02:20 --- quit: Evi1M4chine (Read error: 104 (Connection reset by peer)) 01:02:28 --- join: Evi1M4chine (n=Miranda@dsl50-223.pool.bitel.net) joined #haskell 01:03:14 --- quit: Evi1M4chine (Client Quit) 01:03:21 --- join: Evi1M4chine (n=Miranda@dsl50-223.pool.bitel.net) joined #haskell 01:03:30 --- quit: Evi1M4chine (Read error: 104 (Connection reset by peer)) 01:03:41 --- join: Evi1M4chine (n=Miranda@dsl50-223.pool.bitel.net) joined #haskell 01:03:51 --- quit: Evi1M4chine (Read error: 104 (Connection reset by peer)) 01:03:58 --- join: Evi1M4chine (n=Miranda@dsl50-223.pool.bitel.net) joined #haskell 01:05:27 --- quit: Evi1M4chine (Client Quit) 01:05:34 --- join: Evi1M4chine (n=Miranda@dsl50-223.pool.bitel.net) joined #haskell 01:06:50 --- join: nothingmuch (n=nothingm@bzq-84-108-53-74.cablep.bezeqint.net) joined #haskell 01:08:47 --- quit: johnnowak ("Lost terminal") 01:12:39 --- join: ivant (n=ivan@navi.dorms.spbu.ru) joined #haskell 01:13:02 --- join: takuan (i=rtega@ip-213-49-149-171.dsl.scarlet.be) joined #haskell 01:13:41 --- join: boliver (n=bruno@clpc80.comlab.ox.ac.uk) joined #haskell 01:15:25 --- join: JaffaCake (n=simonmar@tide73.microsoft.com) joined #haskell 01:18:33 Morning JaffaCake 01:18:41 hi there 01:18:58 lovely day for hacking GHC :) 01:19:06 hi JaffaCake 01:19:07 JaffaCake: Do xchg and friends in SMP.h need to be defined for all arches now, including unregisterised? 01:19:34 I've just been thinking about this 01:19:49 we'll probably need to be selective about which arches we support SMP on 01:20:23 currently SMP works properly on arches with full memory ordering guarantees, but AFAIK that only includes x86 and x86_64 01:20:41 Does SMP mean -threaded, or is it something else? 01:20:51 to support weaker memory ordering we need to implement a workaround in the update code 01:21:06 SMP means -threaded with +RTS -N2 or greater 01:21:17 Ah, OK 01:21:49 so with +RTS -N1, it would be safe to use a non-atomic xchg() and cas() in SMP.h 01:23:46 would you like to sort this out? we need to keep a list of arches that support SMP, the best place is probably in config.mk.in where we set GhcWithInterpreter and GhcWithNativeCodeGen 01:24:02 and then disable +RTS -N2 and greater if the arch doesn't support SMP 01:24:28 then we can provide fallback impls of cas() and xchg() for non-SMP-supporting builds 01:24:34 --- nick: Cheer1 -> Cheery 01:24:48 --- join: BCoppens (n=bartcopp@kde/developer/coppens) joined #haskell 01:25:20 also the threaded2 way in the testsuite should only be enabled for SMP archs 01:26:06 OK 01:28:45 JaffaCake, care to define what "full memory ordering" is? 01:30:03 pejo: from the application's perspective, all reads and writes appear to take place in the order they occur in the instruction steam, including reads and writes performed by other CPUs 01:36:03 --- join: Itkovian (n=Itkovian@dragnipur.elis.UGent.be) joined #haskell 01:37:44 JaffaCake, are there data dependencies all over the place, or would a memory barrier in a couple of places do? 01:38:11 pejo: memory barriers tend to be expensive, we want to avoid them if possible 01:38:31 but yes, memory barriers are one workaround 01:39:08 pejo: see http://www.haskell.org/~simonmar/papers/multiproc.pdf 01:39:50 Doh, should have realized and rtfa before commenting. 01:40:15 --- quit: SSelva (Connection timed out) 01:40:31 no problem :) 01:47:51 --- join: cptchaos (n=cptchaos@d193188.adsl.hansenet.de) joined #haskell 01:48:01 --- quit: cptchaos (Client Quit) 01:49:31 --- join: ProfTeggy (n=grust@mackemper1.informatik.tu-muenchen.de) joined #haskell 01:51:42 --- join: boegel (n=boegel@konijn.elis.UGent.be) joined #haskell 01:52:29 --- quit: roconnor (Read error: 110 (Connection timed out)) 01:55:09 --- quit: Khisanth (Read error: 101 (Network is unreachable)) 01:55:21 --- join: Khisanth (n=Khisanth@pool-71-247-74-23.nycmny.east.verizon.net) joined #haskell 01:56:05 --- quit: Evi1M4chine ("Miranda IM! Smaller, Faster, Easier. http://miranda-im.org") 01:56:18 --- join: Evi1M4chine (n=Miranda@dsl50-223.pool.bitel.net) joined #haskell 01:56:48 --- quit: takuan ("leaving") 01:57:12 --- join: takuan (i=rtega@ip-213-49-149-171.dsl.scarlet.be) joined #haskell 01:57:56 --- quit: Evi1M4chine (Client Quit) 01:58:03 --- join: Evi1M4chine (n=Miranda@dsl50-223.pool.bitel.net) joined #haskell 02:01:59 * dons is reminded how much cvs sucks 02:02:50 as much as 1000 industrial-grade vacuum cleaners? 02:03:59 --- join: chris2 (n=chris@p549D4273.dip0.t-ipconnect.de) joined #haskell 02:04:02 black hole? 02:04:30 10000 Russian prostitutes? 02:05:27 --- join: arjanb (i=borganis@borganism.student.utwente.nl) joined #haskell 02:06:14 I could imagine russian prostitutes are comparably uncomplicated... 02:07:14 --- join: cheesy (n=cheesy@ckies.dialup.fu-berlin.de) joined #haskell 02:07:23 depends ulfdoz 02:12:21 ?userrs 02:12:22 Maximum users seen in #haskell: 235, currently: 200 (85.1%) 02:14:28 --- quit: Evi1M4chine ("Miranda IM! Smaller, Faster, Easier. http://miranda-im.org") 02:14:34 --- join: Evi1M4chine (n=Miranda@dsl50-223.pool.bitel.net) joined #haskell 02:14:44 --- quit: Evi1M4chine (Read error: 104 (Connection reset by peer)) 02:14:53 --- join: Evi1M4chine (n=Miranda@dsl50-223.pool.bitel.net) joined #haskell 02:15:01 --- quit: Evi1M4chine (Read error: 104 (Connection reset by peer)) 02:15:07 --- join: Evi1M4chine (n=Miranda@dsl50-223.pool.bitel.net) joined #haskell 02:15:25 --- topic: set to '' by ProfTeggy 02:15:34 woops 02:15:42 Sorry :-/ 02:16:14 --- topic: set to '["Haskell Communities & Activities Report, 10th edition", "http://haskell.org/communities/", "Haskell.org SoC projects", "http://hackage.haskell.org/trac/summer-of-code/", "Haskell is still the language of choice for discriminating hackers", "logs:", "http://tunes.org/~nef/logs/haskell/", "http://www.haskell.org/learning.html", "We put the Funk in Funktion", "The ICFP has ended. Who won?"]' by wolverian 02:16:29 Thanks... 02:16:30 --- join: cheesy34 (n=cheesy@ckies.dialup.fu-berlin.de) joined #haskell 02:16:34 --- quit: cheesy (Read error: 104 (Connection reset by peer)) 02:17:12 no problem 02:17:29 --- join: nilsi (n=anonym@A408a.WH8.tu-dresden.de) joined #haskell 02:17:56 Hi there 02:19:23 what about <> for function composition? in my font f<>g looks good 02:20:14 --- quit: Plareplane ("Ex-Chat") 02:20:30 --- quit: Evi1M4chine (Read error: 104 (Connection reset by peer)) 02:20:37 --- join: Evi1M4chine (n=Miranda@dsl50-223.pool.bitel.net) joined #haskell 02:21:56 --- join: merus (n=merus@cpe-69-133-56-231.cinci.res.rr.com) joined #haskell 02:21:59 @botsnack 02:22:00 :) 02:22:16 --- join: sidd178 (n=siddhart@59.163.68.58) joined #haskell 02:23:06 --- quit: Lemmih (Read error: 60 (Operation timed out)) 02:24:29 --- quit: Evi1M4chine (Client Quit) 02:24:36 --- join: Evi1M4chine (n=Miranda@dsl50-223.pool.bitel.net) joined #haskell 02:25:57 --- quit: Evi1M4chine (Client Quit) 02:26:03 --- join: Evi1M4chine (n=Miranda@dsl50-223.pool.bitel.net) joined #haskell 02:27:12 f <> g <> h $ 123 02:27:38 --- part: sidd178 left #haskell 02:31:15 --- quit: iblechbot (Read error: 104 (Connection reset by peer)) 02:33:34 --- join: pina (n=apin@unaffiliated/pina) joined #haskell 02:33:41 --- part: pina left #haskell 02:34:03 * benja_ prefers & currently 02:34:29 f & g & h $ 123 02:35:17 but my one is like a circle somehow :-) 02:35:26 --- join: roconnor (n=roconnor@n138230.science.ru.nl) joined #haskell 02:35:42 --- quit: Evi1M4chine (Client Quit) 02:35:43 yeah but it's harder to type and it's also like 'not equal' somehow :) 02:35:56 --- quit: jrmole ("Leaving") 02:35:57 --- join: Evi1M4chine (n=Miranda@dsl50-223.pool.bitel.net) joined #haskell 02:36:07 --- quit: Evi1M4chine (Read error: 104 (Connection reset by peer)) 02:36:15 --- join: Evi1M4chine (n=Miranda@dsl50-223.pool.bitel.net) joined #haskell 02:36:22 --- quit: Evi1M4chine (Read error: 104 (Connection reset by peer)) 02:36:24 --- join: koffein__ (n=aik@p50921818.dip0.t-ipconnect.de) joined #haskell 02:36:29 --- join: Evi1M4chine (n=Miranda@dsl50-223.pool.bitel.net) joined #haskell 02:36:41 --- quit: Evi1M4chine (Read error: 104 (Connection reset by peer)) 02:36:48 --- join: Evi1M4chine (n=Miranda@dsl50-223.pool.bitel.net) joined #haskell 02:36:56 actually, I wonder. I might even like `o`. 02:37:46 and you complain about typeability of <> ? :) 02:38:17 =) 02:38:29 nilsi: no, lambdabot does: 02:38:33 > concat . map 02:38:34 Expecting a function type, but found `b' 02:38:34 Expected type: (a1 -> b) ... 02:38:49 see =) 02:39:33 > concat . (map (+1)) 02:39:34 add an instance declaration for (Num [a]) 02:39:48 aha 02:39:56 > concat . (map (++)) 02:39:57 Expecting a function type, but found `b' 02:39:57 Expected type: [a1] -> [a... 02:40:05 > concat . (map (++" ")) 02:40:06 <[[Char]] -> [Char]> 02:40:11 aha! 02:40:31 --- quit: integral (Read error: 110 (Connection timed out)) 02:40:33 nilsi: on the other hand, `o` doesn't need shift 02:40:34 --- quit: Evi1M4chine (Client Quit) 02:40:41 --- join: Evi1M4chine (n=Miranda@dsl50-223.pool.bitel.net) joined #haskell 02:40:59 not on an us keyboard, perhaps 02:41:19 nilsi: not on a finnish keyboard either, as long as you use us layout =-] 02:41:53 designing for typability on non-us keyboards is fighting a lost fight imho :-( 02:43:03 * benja_ uses the windows key as a mode key to switch to an international keyboard layout 02:43:56 i clearly think we should prefer readability over us-typability (being german using an us keyboard that is) 02:43:59 --- quit: koffein_ (Read error: 60 (Operation timed out)) 02:44:01 --- join: integral (i=bsmith@p3m/member/integral) joined #haskell 02:44:31 so use `o` then =) 02:45:38 i do not find `o` readable, unfortunately, let's keep f.g 02:45:46 =-) 02:46:17 the problem, of course, is that it's so subjective 02:46:31 that's why the haskell committe had its syntax czar :) 02:46:32 in R (statistical package) the record syntax is adress$name and i got used to it astonishingly fast 02:47:06 i like having a syntax czar, as long as I am the one :) 02:47:12 :) 02:47:48 who needs semantics, if you can have syntax instead 02:48:19 just use the ring operator :) 02:49:00 there's always !@#$%^& when you get tired of having this discussion. :) 02:50:34 the ring operator is *great* for readability. whenever by chance your system gets the encoding right and has the right font. 02:51:11 --- join: Lemmih (n=david@kbhn-vbrg-sr0-vl206-099.perspektivbredband.net) joined #haskell 02:51:32 how about `u_2218` 02:52:12 --- join: drrho (n=rho@60.226.186.11) joined #haskell 02:52:25 --- quit: ivant (Read error: 110 (Connection timed out)) 02:52:43 encoding and font problems will disappear 02:52:50 eventuall 02:52:51 y 02:53:07 ok, let's use the ring operator then 02:53:09 eventually 02:53:14 ;) 02:53:27 let's have another discussion: is optimistic evaluation compatible with jhc's RTS ? IMHO Haskell needs a compiler that makes unoptimized code fast, not "comonadic-dependant-algebraic-types" one phd is not enough to understand 02:53:59 encoding problems will disappear in 50 years or later I think 02:54:02 --- join: kfish (n=conrad@195.8.233.220.exetel.com.au) joined #haskell 02:54:57 --- quit: Evi1M4chine (Read error: 104 (Connection reset by peer)) 02:54:58 wp doesn't know what optimistic evaluation is :-/ 02:55:14 wp? 02:55:30 wikipedia 02:55:49 --- join: Evi1M4chine (n=Miranda@dsl50-223.pool.bitel.net) joined #haskell 02:57:16 basically it is something like speculative evaluation of lazy computations, using a runtime profiler to prevent programs that actually need laziness from becoming to slow 02:58:19 http://www.cambridge.intel-research.net/~rennals/talk_opt.pdf 02:59:17 for me it is the only option to get haskell into mainstream 03:00:08 --- quit: Evi1M4chine (Read error: 104 (Connection reset by peer)) 03:00:16 i'm not sure i want haskell into mainstream 03:00:19 you think haskell's *not* doomed to succeed? :) 03:00:20 --- join: Evi1M4chine (n=Miranda@dsl50-223.pool.bitel.net) joined #haskell 03:00:54 sidestream is slower and more comfortable 03:01:30 no, it is just not bad enough for mainstream yet - so propose additions 03:01:53 we NEED introspection 03:02:05 and multi-class inheritance 03:02:20 and macros. MACROS"! 03:02:54 and casting 03:02:55 we need JOBS! 03:03:10 dons: I don't think we can get him 03:03:26 Heh 03:03:31 he 03:03:36 hehe 03:04:26 what about imperative features? this darned functional style -.- 03:04:30 oh wait 03:04:34 we need a uniform syntax such as parentesized prefix notation... er ... 03:04:39 I thought haskell macros go by the name "template haskell" 03:05:36 we should forbid a function to call itself 03:05:49 ha! 03:05:56 is this haskell-2.x discussion? 03:05:56 yeah, recursion causes bubbles in your brain -.- 03:06:03 mope 03:06:09 its haskell 2015 03:06:15 nilsi: that'll make it mainstream *and* ensure termination for all programs! 03:06:19 --- join: Plareplane (n=plarepla@142-165-43-211.sktn.hsdb.sasknet.sk.ca) joined #haskell 03:06:22 theory *and* practice! 03:06:28 and the damned garbage collector slows everything down ... just use new and delete! 03:06:38 profmakx: ahh, good. i though i'd have to re-learn many things 03:06:45 --- quit: Plareplane (Remote closed the connection) 03:06:47 itself 03:06:47 13:04 < benja_> ha! 03:06:47 13:04 < gour> is this haskell-2.x discussion? 03:06:52 argh 03:07:00 I should stop playing with the mouse pad 03:07:24 hmmmm, where are you 03:07:26 eastern europe? 03:07:39 i need global variables... im just reviewing code which is full of them 03:07:40 finland? 03:07:45 we need a better industrial name like Jaskell 2 Starwars Edition 03:07:46 norpan: i'm from croatia 03:07:51 hey, nice 03:08:12 and then there is the matter of lack of segfaults. A LANGUAGE CANNOT SURVIVE WITHOUT SEGFAULTS! THE SAFETY PEOPLE HAVE CORRUPTED OUR PRECIOUS BODILY FLUIDS!!!!!!!!!! 03:08:38 ibid: you can get segfaults with foreign import 03:08:44 owah, put the brakes on the negativity express 03:09:05 we need haskell IDE 03:09:16 psnl, i am really depressed by this code im reviewing right now 03:09:18 the "unsafe" word is the problem, change it to "useful" usefullPerformIO 03:09:19 gour: thats a good suggestion 03:09:36 norpan: and do you expect a five-day wonder to learn foreign import 03:09:47 ? 03:09:50 DO YOU? 03:09:51 profmakx: I know what you mean 03:09:51 :) 03:09:54 just send SEGV to your Haskell program. Problem solved. 03:10:01 you can teach them to import Segfault and use Segfault.segfault 03:10:06 psnl: hIDE needs some help (from experienced guys) 03:10:08 SIGKILL me now 03:10:27 --- join: Plareplane (n=plarepla@142-165-43-211.sktn.hsdb.sasknet.sk.ca) joined #haskell 03:10:45 is there a inline assembler yet? 03:10:48 hm. we need a SIGHASKELL 03:10:52 Haskell only supports monadic segfaults 03:10:58 (not kidding this time) 03:11:26 --- quit: Plareplane (Client Quit) 03:11:26 gour: I'll take a look when I have time 03:11:33 benja_: damn, i need ternary segfaults. are you saying haskell cannot deliver? 03:11:43 --- quit: ths (Read error: 110 (Connection timed out)) 03:11:51 although there's discussion about using arrows to pinpoint blame for segfaults in haskell' 03:12:09 we need gdb support for haskell 03:12:15 psnl: thanks. i'd also like to join after i learn something more. still didn't finish that craft of fp book :-( many distractions on the road 03:12:19 ibid: there's usefulPerformIO segfault 03:12:30 benja_: that's ternary? 03:12:32 unsafePerformSegfault 03:12:35 norpan: Seen mnislaih code? 03:12:37 norpan: what about debugger for ghci from gsoc project? 03:12:53 no need to wonder why mainstream ignores us *sigh* 03:12:56 ibid: no unary, but you can use currying 03:13:03 hm 03:13:27 Lemmih, gour: no 03:13:29 @where Ghci.Debugger 03:13:29 http://haskell.org/haskellwiki/Ghci/Debugger 03:13:31 --- quit: Evi1M4chine (Client Quit) 03:13:41 --- join: Evi1M4chine (n=Miranda@dsl50-223.pool.bitel.net) joined #haskell 03:13:51 why do we have only unsafePerformIO? i want safelyPerformIO that does what i want even if i say it wrnog! 03:14:05 ^ hm, someone from Bielefeld 03:14:31 wrong too 03:14:46 ibid: We already have safelyPerformIO; it's called 'id'. 03:15:14 ah the name is to short 03:15:23 --- quit: xinming (Connection timed out) 03:15:28 it is overlooked 03:15:36 sieni: it doesn't typecheck 03:15:53 ibid: that's what makes it safe 03:15:57 --- join: Beelsebob|Mini (n=Beelsebo@minibob.quixotic.org.uk) joined #haskell 03:16:16 * gour downloads the video 03:16:28 mnislaih: did you use some video editor? 03:16:31 can you switch off the typechecker to improve compiling? :) 03:16:37 benja_: i wonder i just almost started writing "we want information, information, information... you won't get it!" 03:16:56 +why 03:16:56 --- quit: drrho ("using sirc version 2.211+KSIRC/1.3.11") 03:17:22 (by hook or by crook we will) 03:17:35 well. time for me to start reading this thesis here... 03:17:43 --- join: jak (n=john@194.201.144.25) joined #haskell 03:17:51 you still haven't? :-o 03:17:55 energize! :) 03:18:45 :) 03:18:55 --- join: ShereKahn (n=ajourez@14.201-200-80.adsl.skynet.be) joined #haskell 03:21:06 --- quit: Evi1M4chine (Client Quit) 03:21:12 --- join: Evi1M4chine (n=Miranda@dsl50-223.pool.bitel.net) joined #haskell 03:22:22 --- join: ths (n=ths@mipsfw.mips-uk.com) joined #haskell 03:24:51 --- part: cheesy34 left #haskell 03:28:50 --- part: Evi1M4chine left #haskell 03:29:29 --- join: Evi1M4chine (n=Miranda@dsl50-223.pool.bitel.net) joined #haskell 03:29:54 --- quit: Evi1M4chine (Client Quit) 03:32:26 I like this paper: http://delivery.acm.org/10.1145/1120000/1111563/p121-luca.pdf?key1=1111563&key2=0452426511&coll=&dl=ACM&CFID=15151515&CFTOKEN=6184618 03:32:52 Title: Program Transformation by Solving Recurrences 03:33:07 --- quit: vegai (Read error: 148 (No route to host)) 03:39:29 --- quit: ramkrsna (Read error: 110 (Connection timed out)) 03:41:35 --- quit: Beelsebob|Mini () 03:42:11 --- join: Beelsebob|Mini (n=Beelsebo@minibob.quixotic.org.uk) joined #haskell 03:42:21 --- join: Stinger_ (i=stinger@122-49-166-50.ip.adam.com.au) joined #haskell 03:42:51 --- join: Evi1M4chine (n=Miranda@dsl50-223.pool.bitel.net) joined #haskell 03:43:05 --- join: ramkrsna (n=ramkrsna@unaffiliated/ramkrsna) joined #haskell 03:45:39 --- quit: Evi1M4chine (Client Quit) 03:48:14 --- join: christo_ (n=christo@d58-105-158-83.dsl.nsw.optusnet.com.au) joined #haskell 03:48:28 --- part: christo_ left #haskell 03:48:30 --- quit: roconnor (Read error: 110 (Connection timed out)) 03:53:10 --- quit: genneth (Read error: 113 (No route to host)) 03:56:06 --- quit: boegel (Read error: 110 (Connection timed out)) 03:57:48 --- quit: takuan (Read error: 104 (Connection reset by peer)) 03:59:17 --- join: johnnowak (n=johnnowa@207-38-204-65.c3-0.wsd-ubr2.qens-wsd.ny.cable.rcn.com) joined #haskell 03:59:56 --- join: takuan (i=rtega@ip-213-49-149-171.dsl.scarlet.be) joined #haskell 04:01:33 --- join: Jaak (n=Jaak@194.126.113.161) joined #haskell 04:04:46 anyone know where you get unregistered .hc files for ghc? 04:06:53 the gghdrms (the glorious glasgow haskell digital restrictions management system) prevents you from using unregistered .hc files 04:06:59 (just kidding) 04:08:31 oh, other meaning of unregistered 04:10:03 --- quit: johnnowak ("Lost terminal") 04:10:08 --- join: johnnowak (n=johnnowa@207-38-204-65.c3-0.wsd-ubr2.qens-wsd.ny.cable.rcn.com) joined #haskell 04:11:03 psnl: unregister*is*ed 04:11:07 psnl: What are you trying to do? 04:11:35 --- quit: _frederi1_ (Read error: 54 (Connection reset by peer)) 04:11:54 Igloo: build ghc on an sprace box running openbsd 04:12:11 sparc, even 04:12:52 You need to follow http://www.haskell.org/ghc/docs/latest/html/building/sec-porting-ghc.html#unregisterised-porting then 04:12:53 Title: 10. Porting GHC 04:13:36 Igloo: are you suggesting cross compiling? 04:14:21 It's not exactly cross-compiling. You generate .hc files on a machine with ghc, copy them to the sparc/openbsd machine and compile them there 04:14:38 ok, cool 04:15:26 psnl: Oh, and where it says "make boot UseStage1=YES", you need to do "make boot UseStage1=YES EXTRA_HC_OPTS='-O -fvia-C -keep-hc-files'" 04:15:29 --- quit: Itkovian () 04:16:47 --- join: Itkovian (n=Itkovian@dragnipur.elis.UGent.be) joined #haskell 04:23:15 Igloo: just saw the announcement. congrats! :) 04:25:22 thanks :-) 04:25:51 JohnMeacham: would it make sense to have a frisby-bytestring port? 04:27:08 --- join: Plareplane (n=plarepla@142-165-43-211.sktn.hsdb.sasknet.sk.ca) joined #haskell 04:28:15 audreyt: well, lazyness is one of its selling points. but PEGs are so expressive, I can't imagine not wanting to use them always, they subsume pretty much everything else. :) I would like more feedback on the API and algorithms before I commit to an interface, but it will probably look more or less like it does now. 04:30:00 well, there's ByteString.Lazy 04:30:13 audreyt: I sort of want to try extending yi with a syntax highlighter based on it, because it wouldn't just know syntax, it would be able to do a full parse, and fast, and PEGs are very good at dealing with errors and recovering gracefully, so you could highlight just the parse errors in red or something. 04:30:27 --- quit: kpreid () 04:30:27 yeah. I've written a wiki parser in packrat 04:30:46 using 'pappy'? 04:30:49 yup 04:30:50 --- quit: ShereKahn ("Leaving") 04:30:53 cool. 04:30:54 actually no, its monadic equiv 04:30:57 --- join: kpreid (n=kpreid@24-52-49-37.bflony.adelphia.net) joined #haskell 04:31:32 at that time I remember I've pined for a commit" primitive 04:31:43 that blocks its rhs // from backtracking 04:31:52 I understand there's no speed penalty for backtracking 04:31:59 but sometimes I'd like it not to 04:32:56 --- join: roconnor (n=roconnor@n138230.science.ru.nl) joined #haskell 04:41:25 --- join: der_eq (n=eq@dslc-082-082-091-015.pools.arcor-ip.net) joined #haskell 04:44:13 --- join: iblechbot (n=iblechbo@62.216.200.179) joined #haskell 04:50:10 audreyt: ? it never backtracks, just do a &foo to test whatever you want, then go for it. 04:51:17 I guess it depends on how you look at it in a sense, but looking into the future is different in that it can skip over stuff, and there are multiple potential futures. 04:51:41 or you can do // return 'x' to have it stop and return x. 04:51:56 or // unit 'x' in frisby actually. 04:55:30 like, expressions can end in // unit 'invalid expression' to make expressions always parse, embedding error messages within the syntax tree. 04:58:39 --- quit: therp (Remote closed the connection) 04:58:47 --- join: nothingmuch_ (n=nothingm@bzq-84-108-53-74.cablep.bezeqint.net) joined #haskell 04:58:47 --- quit: nothingmuch (Read error: 104 (Connection reset by peer)) 05:01:22 --- join: therp (n=nil@chello080108077214.34.11.tuwien.teleweb.at) joined #haskell 05:04:18 --- join: boegel (n=boegel@vpna183.ugent.be) joined #haskell 05:08:29 @karma+ dcoutts 05:08:30 dcoutts's karma raised to 19. 05:08:54 Gtk2Hs is fun to use! 05:09:19 @karma kolmodin 05:09:19 You have a karma of 0 05:09:22 argh! 05:09:23 :) 05:09:30 --- quit: nilsi ("Dana") 05:09:42 @karma+ kolpudding 05:09:43 kolpudding's karma raised to 1. 05:09:48 hah :) 05:09:51 ops, miss 05:10:21 --- join: vegai (n=vegai@chat.ravissant.net) joined #haskell 05:10:54 * gour sees kolmodin is liberated - no karma 05:21:23 JohnMeacham: sorry. I mean possesitve quantifiers 05:21:27 like \d++ in regex 05:21:39 i.e. a "many1" that does not give anything back 05:21:53 equiv to the parsec "many1" 05:22:10 such that /\d++\d/ never matches 05:22:44 how would you write such a many1 in frisby? 05:22:57 notFollowedBy or somesuch? 05:23:27 audreyt: what regex system does "++"? 05:23:34 kpreid: pcre, among other places 05:23:36 perl5 too 05:23:39 huh 05:23:49 never seen it before 05:23:52 in perl5 it's called (?>\d+) 05:23:56 but essentially same thing 05:24:02 er...then that's not the same thing 05:24:12 how is it not? 05:24:21 it's the same underlying semantics, that is. 05:24:24 --- quit: therp ("Leaving") 05:24:26 sorry, clarification: I was asking about the particular syntax, not the behavior 05:24:38 oh ok. sorry. then yes, pcre-based ones. 05:25:29 musasabi: many1 x `notFollowedby` x ? 05:25:54 something like that, if I understand correctly what you want. 05:26:10 in frisby I guess it's spelled peek . doesNotMatch 05:26:18 but yeah. hm. 05:26:51 the analogy fails on \d{2,3}+ though 05:27:18 psnl, there should already be binaries for ghc on sparc/openbsd 05:27:21 at least for ghc 6.2.2 05:27:25 though that can be decomposed into two subparsers 05:27:33 and there's already some .hc files for you 05:27:45 --- quit: boegel ("This computer has gone to sleep") 05:28:38 psnl: ah , here, .hc files for 6.2.1, ftp://ftp.cse.unsw.edu.au/pub/users/dons/ghc/6.2.1/ 05:29:03 JohnMeacham: state. the reason I used packret's monads is that it allows userdefined state 05:29:04 --- join: boegel (n=boegel@konijn.elis.UGent.be) joined #haskell 05:29:15 that threads through the parse 05:29:30 I understand each "modify" will duplicate the linear cache space 05:29:52 but is it possible for P to carry userState in addition to the existential s? 05:31:55 --- quit: Jaak ("bbl") 05:33:06 --- join: sslow (n=siganos@195.251.96.24) joined #haskell 05:40:41 mmm! 'Formalising a High-Performance Microkernel written in Haskell, using Isabelle/HOL' 05:40:54 yay performance 05:41:01 dons: ooh 05:41:59 psnl: yeah , ghc/sparc was working on openbsd till recently. if you check the package archives, you might find a binary (otherwise building from .hc should be possible) 05:42:13 dons: thanks 05:43:53 --- join: tennin (n=max@ppp-68-95-68-204.dialup.stlsmo.swbell.net) joined #haskell 05:45:11 --- join: sad0ur (n=sad0ur@rb1a240.net.upc.cz) joined #haskell 05:46:20 ?where house 05:46:21 http://www.cse.ogi.edu/~hallgren/House/ 05:47:58 --- join: scsibug__ (n=scsibug@ppp-70-254-171-254.dsl.rcsntx.swbell.net) joined #haskell 05:48:39 oh wow, house is under development! 05:48:42 --- quit: scsibug_ (Read error: 104 (Connection reset by peer)) 05:50:24 some papers, http://haskell.org/haskellwiki/Research_papers/Program_development#Operating_Systems 05:50:26 Title: Research papers/Program development - HaskellWiki 05:50:39 cool :) 05:53:47 "Composing the User Interface with Haggis" gives me very strange mental images 05:54:15 :-) 05:54:25 heh 05:59:37 "no no click the sheep guts" 06:01:33 --- join: tenni1 (n=max@ppp-68-95-68-221.dialup.stlsmo.swbell.net) joined #haskell 06:04:40 "no, no click the yowe intimmers" 06:06:28 yum, haggis 06:06:30 bah, ghostview is being a pain 06:07:05 I'd actually like to try haggis (and I'd also like to read this paper...) but real haggis is illegal here. 06:08:15 here? 06:08:27 the US 06:08:38 is that reasonable? 06:08:53 what is haggis? 06:08:57 It's a public health thing about not eating lungs of certain animals 06:09:02 ?google haggis severe illness 06:09:05 http://www.phac-aspc.gc.ca/bid-bmi/dsd-dsm/nb-ab/2003/nb0603_e.html 06:09:19 that sounds reasonable, then 06:09:41 SamB: the scottish national dish 06:09:50 so no sweetmeats in general? 06:09:59 is it illegal to buy or illegal to make? 06:10:15 Do you have a link to that 16 cpu mips station sold at 3k$ ? 06:10:26 SamB: its normally made from all the bits left over after taking the good stuff from a sheep 06:10:26 To sell, I think. 06:10:27 its illegal to produce a device that circumvents the haggis protection mechanisms 06:10:46 dons: you are confused with copyright, I think 06:10:52 dons++ -- haggis drm 06:11:08 @karma+ dons -- haggis drm 06:11:08 dons's karma raised to 52. 06:11:12 heh 06:12:18 whee, this semester is going to be fun. Biking to class every day. 06:12:47 well, tuesday and thursday. But that's an aproximation of every day 06:12:59 heh 06:13:05 xerox, http://www.movidis.com/products/rev.asp 06:13:07 Title: Movidis 06:13:29 dcoutts: thanks 06:14:32 --- join: Jaak (n=Jaak@194.126.113.161) joined #haskell 06:16:42 --- nick: mathrick -> mathrick|away 06:16:55 --- quit: tennin (Read error: 113 (No route to host)) 06:18:44 --- quit: dgoldsmith () 06:19:17 --- quit: iblechbot (Read error: 113 (No route to host)) 06:20:58 --- quit: johnnowak ("leaving") 06:23:22 --- quit: xerox () 06:25:08 --- quit: kfish ("zzzzz") 06:31:04 --- quit: jgrimes (Read error: 110 (Connection timed out)) 06:34:07 --- join: jgrimes (n=jgrimes@Lee-10-101.rh.ncsu.edu) joined #haskell 06:34:18 --- quit: jewel (Read error: 110 (Connection timed out)) 06:35:09 --- quit: dolio (Read error: 104 (Connection reset by peer)) 06:38:08 Gtk2Hs UTF-8 question: I have a string, "\209\135\209\130\208\190", which shows like что with putStr, but which shows like что in the textView. 06:38:58 --- join: dolio (n=dolio@nr10-216-68-188-34.fuse.net) joined #haskell 06:39:44 Do I somehow have to parse the string into unicode? Those escaped numbers in the string are byte values, right? 06:40:11 --- join: ookk (n=ookk@81-226-212-4-no29.tbcn.telia.com) joined #haskell 06:40:12 Oejet, you've double encoded the string 06:40:39 or rather you've started with it encoded as UTF8 but in a String 06:40:47 where as String is already unicode 06:41:04 so when Gtk2Hs turns the String into UTF8, your thing gets double encoded 06:41:26 the trick is to start with a normally unicode string 06:41:41 so if you're reading from a file then decode from utf8 06:41:50 what is the benefit of having monads and syntax-suger to make it look like imperative operations instead of just adding imperative features to the language? 06:42:01 I have parsed the string from a text file. 06:42:22 Oejet, then you'll need to decode the UTF8 into a normal Haskell unicode String 06:42:39 Hm, so I need a library? 06:42:51 or pinch the code from somehwere 06:43:06 does this help? http://repetae.net/john/recent/out/HsLocale.html (i'm planning to use it for wxhaskell) 06:43:07 there's plenty of UTF8 encoder/decoders about 06:43:07 Title: HsLocale 06:43:19 I guess there are no plans to make haddock support .lhs directly? 06:43:19 kzm: You have 1 new message. '/msg lambdabot @messages' to read it. 06:43:36 kzm, wouldn't you just unlit it first? 06:43:44 --- join: nilsi (n=anonym@A408a.WH8.tu-dresden.de) joined #haskell 06:43:45 Oejet, sadly there's not UTF8 enc/dec stuff in the standard libs yet, bu you can easily get the code elsewhere 06:44:00 @seen nilsi 06:44:00 You are in #haskell. I last heard you speak just now. 06:44:04 just have to hunt for the haskell warz 06:44:14 warez.. 06:44:18 I guess I'm not completely clear on how to invoke haddock from a Makefile. Should I explicitly unlit .lhs to create .hs? 06:44:46 Currently, I just do: haddock -h `find src -name \*.hs` -o docs 06:44:56 Perhaps I should be more refined? 06:45:18 kowey: Was that for me? bytesToString looks somewhat related to my problem. :-) 06:45:30 Oejet: yes 06:45:43 kowey: Thank you. 06:45:59 :-) 06:48:51 kowey: That looks a bit like overkill, I'm afraid. And also: 06:49:39 ]$ make 06:49:39 hsc2hs -C "" -o CWString.hs CWString.hsc 06:49:39 ghc-6.4.2: file `' does not exist 06:50:11 Oejet: ick... i'm afraid I haven't tried to use it yet... i guess i too am looking for a way to read UTF-8 strings in 06:52:15 @google "CWString.hs" 06:52:15 The function shouldn't be more than a couple of lines, I think. String -> String, but interpreting the input as bytes, and accumulating according to the utf-8 escape bits. 06:52:17 http://repetae.net/john/repos/HsLocale/Makefile 06:52:18 Oejet: fwiw, i removed the -C "$(CFLAGS)" from the Makefile 06:52:46 --- join: chessguy (n=chessguy@c-69-242-13-143.hsd1.pa.comcast.net) joined #haskell 06:52:55 ... which leads to other haskelly errors 06:53:30 --- quit: sad0ur ("leaving") 06:53:33 Oejet: I believe there is supposed to be one in gtk2hs 06:54:02 though it's not exported 06:54:16 dcoutts: which module was it in again? 06:54:18 perhaps, this too? http://www.darcs.net/darcs-unstable/UTF8.lhs 06:54:49 SamB, glib/System/Glib/UTFString.hs.pp 06:54:58 kowey: doesn't quite look like it 06:55:16 it looks like that one uses [Word8] for 06:55:28 the utf-8 06:55:47 --- quit: merus ("Leaving") 06:57:23 SamB: well yes, because UTF-8 is byte based 06:57:31 norpan: yeah 06:57:45 it makes *sense*, it just doesn't compose well :-( 06:58:27 SamB: interesting... elaborate? 06:58:51 kowey: well, depending on what you are doing 06:59:52 I mean, the String -> String interface works well for data that was just read as if in ISO 8859-1 or is about to be written as such... 07:01:22 SamB: just use map (toEnum.fromEnum) 07:01:31 yeah yeah... 07:02:28 * kowey still does not understand :-( 07:02:40 take a look 07:02:43 i'm having trouble seeing what would compose well, given the varying-number-of-bytes thing 07:02:54 --- join: takuan_ (i=rtega@ip-213-49-149-171.dsl.scarlet.be) joined #haskell 07:02:58 what does that have to do with anything? 07:03:12 --- join: rashakil_ (n=rashakil@cpe-72-224-117-93.nycap.res.rr.com) joined #haskell 07:03:34 --- quit: takuan (Read error: 104 (Connection reset by peer)) 07:03:36 uh... perhaps nothing! ok, i think this means i *really* don't see what compose well means 07:03:40 :-) 07:03:55 @type let decode = undefined :: String -> String in liftM decode . readFile 07:03:57 String -> String in liftM decode . readFile :: FilePath -> IO String 07:04:39 hmm... 07:05:00 could really use a parser for @type, couldn't it? 07:06:27 I will write a simple translator. I'll be back in a bit. 07:06:31 anyways... if it was [Word8] -> String, you'd need to coerce all the Chars read from the file into Word8s first, which is, if nothing else, unneeded clutter... 07:06:39 Oejet: eh? 07:06:49 glib/System/Glib/UTFString.hs.pp has one 07:07:22 --- join: psi (n=psi@c-c97e71d5.015-127-6c756c1.cust.bredbandsbolaget.se) joined #haskell 07:07:50 oh... is there nothing like a readFile8 that would give [Word8] ? 07:08:14 (this gets rather uncomfortable if you're not primarily using utf-8, i imagine...) 07:10:31 --- quit: rashakil (Read error: 110 (Connection timed out)) 07:13:22 --- quit: psi (Remote closed the connection) 07:18:08 --- part: kowey left #haskell 07:18:11 --- join: kowey (n=kow@chartreuse.loria.fr) joined #haskell 07:18:42 hmm? 07:21:05 ping Lemmih 07:21:16 Lemmih: ping 07:21:24 * SamB takes mnislaih literally 07:21:40 o¿o 07:21:53 --- join: nealc_ (n=user@200.101.96.125) joined #haskell 07:22:00 I hope the rest of the channel won't, or we'll flood poor Lemmih 07:24:20 Yo 07:24:56 ah Lemmih 07:25:02 I think I've found the issue 07:25:10 --- nick: tenni1 -> tennin 07:25:10 with the "ase" thing 07:25:12 well I think we are smart enough to tell that Lemmih only needs to be pinged once ;-) 07:25:17 --- quit: anonfunc () 07:25:31 it looks like RTS symbols don't get the same names in all the archs 07:25:43 mnislaih: Oh? 07:25:56 and my hand made parsing routines are not solid enough 07:26:10 SamB: Do you mean readUTFString? 07:26:17 I'm trying to get a Linux build at ender4 07:26:26 and then I'll push a patch fixing it 07:26:40 heh I read that as readWTFString 07:26:45 Okay. 07:27:14 Lemmih: for instance, I get '_base_GHCziBase_False_static_info' for Bool.False 07:27:41 (I'm in Mac Intel) 07:27:43 mm. Z encoding! 07:27:53 mnislaih: what is so wierd about that? 07:27:55 --- join: ex__nor (n=exnor@ppp113-151.static.internode.on.net) joined #haskell 07:27:58 now with packages! 07:28:08 but why is the version number missing? 07:28:12 it's not, but looks like it's not the same in Lemmih's system 07:28:22 dons: do you know? 07:28:39 * dons has a poster of the Z encoding on the wall of his office space 07:28:45 mnislaih: How does it differ? 07:28:59 should not the version number of the package be included in the symbol? 07:29:03 I think the leading underscore is not present, but I'm not sure yet 07:29:13 mnislaih: oh, just that? 07:29:14 Right, that depends on the arch/OS 07:29:20 yes, just that 07:29:39 that sounds like a C thing 07:29:54 sometimes C symbols have _ prepended, other times not 07:30:04 mnislaih: You can find out whether it's included from Config.cLeadingUnderscore 07:30:17 cool, thanks Igloo! 07:34:08 * SamB looks at http://hackage.haskell.org/trac/haskell-prime/wiki/RemovalCandidates again 07:34:10 Title: RemovalCandidates - Haskell Prime - Trac 07:34:30 JaffaCake, the ghc 6.6 packages plan looks good to me. 07:34:42 they aren't seriously considering removal of k patterns for the next Haskell, are they? 07:34:45 great, thanks 07:34:51 with no replacement in sight and all? 07:35:17 JaffaCake, oh and nice that we might get a better working mips port thanks to ths :-) 07:35:28 yep 07:35:37 * SamB wonders where JohnMeacham is 07:36:08 Lemmih: fix up 07:36:51 oh, wait, he seems to have fixed the problem I found in the docs... 07:38:58 oh, well, one of them anyway... 07:39:16 --- quit: hikozaemon ("Leaving...") 07:39:44 hmm, my mail server still ain't working? 07:44:03 SamB: Which one of the functions in glib/System/Glib/UTFString.hs would I need? I tried to do this: utf8str <- withCString str readUTFString, but that gave me a segmentation fault. 07:44:41 Oejet: oh, you have a C string encoded in UTF-8? 07:45:06 No, I use readFile to get "str". 07:45:08 --- join: iblechbot (n=iblechbo@62.216.200.163) joined #haskell 07:45:12 oh 07:45:22 right... 07:46:30 Oejet: copy+paste toUTF and fromUTF 07:47:10 SamB: Ah, so I should look into the source. :-) 07:47:24 hehe, yes ;-) 07:47:44 --- join: qwr (n=qwr@atsgw.cyber.ee) joined #haskell 07:47:50 JaffaCake, you wrote something about relying on the distributions package managers for distributing packages in your GHC 6.6 email 07:48:06 I'm not sure that's a good thing 07:48:06 --- quit: bobstopper ("Leaving") 07:48:38 I didn't mean to imply that we wouldn't be providing binary distributions as usual - we certainly will 07:48:54 * SamB wonders what JaffaCake meant 07:49:08 * musasabi thinks a ghc-minimal-6.6.tar.bz2 and a ghc-all-6.6.tar.bz2 could be one way to proceed. 07:49:31 we supply binary tarballs for Linux, and Windows installers - that will continue 07:49:50 and the other dists that people contribute 07:50:14 hmm 07:50:18 but if you're on a system with a package manager, you're better off getting GHC from there 07:50:21 I need an excuse to write a parser 07:50:46 do I make sense? 07:51:30 I don't think it's a very good idea to have package managers manage libraries (but they should manage GHC), in the long run I think haskell is better of with a package managers of its own 07:51:37 JaffaCake: but it is nice to have multiple different versions of GHC and in that case the tarball-method makes most sense for the extra versions. 07:51:44 musasabi: yes, we might well do that (if it doesn't add too much complexity to the build/dist setup) 07:51:47 it doesn't work well for the ruby community 07:52:06 tibbe: I agree 07:52:10 tibbe: on that I disagree 07:52:11 lots of outdated and missing packages, package maintainers can't keep up 07:52:12 --- nick: nothingmuch_ -> nothingmuch 07:52:12 JaffaCake: I've introduced a dependency on mtl since I used a State monad in my code. Should I refactor it ? 07:52:35 We've got cabal-install. 07:52:42 JaffaCake, everybody just uses RubyGems, although I know that the debian people disagree as well 07:53:00 Lemmih, yes :) and as soon as we have cabal-uninstall it 07:53:07 AFD@#!@$EF return key 07:53:09 mnislaih: which code? 07:53:10 --- quit: chris2 (No route to host) 07:53:24 Lemmih, as soon as we have cabal-uninstall it'll be great 07:53:35 in some code for stage2 in the ghc.debugger 07:53:37 * tibbe could write it if he was good enough 07:53:54 tibbe: the problem is that then Cabal packages can't interact with the package system, specifying dependencies on non-Haskell libraries for example 07:54:10 JaffaCake: what OS do you *use*? 07:54:16 JaffaCake, hmm, true, do you have a good solution? 07:54:33 tibbe: yes, automatic generation of OS packages from Cabal packages 07:54:36 hmm i've used ruby libraries from debian packages 07:54:45 mnislaih: It works. 07:54:48 SamB: several OSs 07:54:58 each more diabolical than the last! 07:54:59 JaffaCake, that would be great indeed, my experience of building debian packages is that it's all but automatic 07:54:59 oh, maybe you could do like Debian's Lisp stuff? 07:55:07 mnislaih: (your patch, that is) 07:55:14 SamB: desktop: Windows, under the desk: Linux, laptop: Gentoo, at home: FreeBSD 07:55:17 Lemmih: cool, thanks for trying it 07:55:22 qwr, me too, until I find that too many are missing or old 07:55:30 --- quit: dolio (Read error: 110 (Connection timed out)) 07:55:38 Lemmih, do you think we should make some kind of announcement ? 07:55:45 JaffaCake: what version of Debian do you run? ;-P 07:56:06 Debian I don't have, except an old laptop at home that I installed Ubuntu on 07:56:13 I thought not 07:56:18 mnislaih: Yeah. 07:56:50 Hm, using toUTF I still get giberish: отдÐÂ. 07:57:00 Lemmih: I hope people aren't too scared by the perspective of building ghc manually 07:57:14 mnislaih: sorry yeah, I try to avoid mtl dependencies in GHC 07:57:26 * SamB does *not* want to deal with binary packages of Haskell libraries in Debian 07:57:47 JaffaCake don't worry, it shouldn't take more than two minutes 07:57:52 JaffaCake, for example I have to manually create packages for libraries that exist in Ubuntu development but not in stable (which I use), so distributions that rely on periodical releases are not very satisfactory when I want to do edge developent as it stands right now 07:57:53 mnislaih: what's the prospect for getting your breakpoint patches into 6.6? 07:58:27 JaffaCake: btw, I'm working right now on a few little clean ups of Data.ByteString, to push in the next 48 hours 07:58:30 does that fit? 07:58:42 perhaps my perspective is odd due to having been stuck on dialup... 07:58:46 tibbe: right, in that case you will want cabal-install, or manually install Cabal packages 07:59:04 dons: sure 07:59:06 JaffaCake, yes, and cabal-uninstall when I want to remove them ;) 07:59:16 well, maybe 07:59:33 JaffaCake: I have finished the users guide documentation. The coding work is mostly complete. I'm halfway done with tests. But I'm not sure it is completely bug free, I want to get some people to try the debugger and see how it goes before recommending its inclusion in 6.6 07:59:45 the whole spray your filesystem or make install like procedure makes me a little nervous 07:59:52 s/or/of 07:59:54 but I really don't think Debian should be distributing these libraries as binaries... 08:00:09 mnislaih: as long as it doesn't break anything else, experimental code is not really a problem 08:00:44 JaffaCake, then maybe we should try to include it the release candidate and see how it goes 08:01:02 tibbe: yes indeed, but that's why we have /usr/local 08:01:13 but I'm a bit nervous since not many people have used it yet apart from *me* 08:01:15 mnislaih: sounds good to me 08:01:46 it isn't likely to impact anything else, right? 08:02:03 I think so 08:02:40 unless we want to have '-fdebugging' as a default option 08:02:59 but even so, -fdebugging is pretty solid 08:03:46 so how do breakpoints ... um ... work? 08:03:57 SamB: why not? 08:04:01 @where ghci.debugger 08:04:01 http://haskell.org/haskellwiki/Ghci/Debugger 08:04:05 SamB: I certainly don't feel like compiling anything :) 08:04:07 there is a video SamB :) 08:04:18 mnislaih: we might still want to change how the dynamic breakpoints are done 08:04:20 The code seems very stable and it shouldn't affect other areas of GHC. 08:04:33 Cale: well, because whenever I wanted to install one they'd have just switched compilers in testing... 08:04:47 --- quit: ookk ("This computer has gone to sleep") 08:04:50 but for the first cut I think it's ok to label this as a "very experimental" 08:05:00 --- quit: jwp (Success) 08:05:23 --- join: plisk (n=plisk@195.222.84.175) joined #haskell 08:05:39 what does -fdebugging do? enable dynamic breaks? 08:05:43 JaffaCake, yes but that still doesn't solve versioning and upgrading 08:05:50 Was there a decision on the Cabal optional dependencies stuff? Even something minimal would be nice to have for fps - or provide an empty fps package by default. 08:05:56 JaffaCake I agree, as I said in the wiki this is "the simplest thing that could possibly work", i.e. in a sense it is a very crude implementation 08:05:57 JaffaCake, just checking: you said you applied ndm's "setup haddock --hoogle" patch. I've not seen it come through. 08:06:14 yes, -fdebugging enables the instrumentation of code with breakpoints 08:06:23 dcoutts: I got a minor conflict, need to modify and push 08:06:31 ok 08:06:47 The conflict was probably my fault :-) 08:06:48 mnislaih: so without -fdebugging you can still add breakpoints to the code? 08:06:58 dcoutts: yes 08:07:14 manual breakpoints are always available, but dynamic breakpoints are there only with -fdebugging 08:08:03 you should check the documentation JaffaCake ;) 08:08:28 I posted a link to a snapshot in the wiki page 08:08:28 dcoutts: pushing now 08:08:35 ok 08:08:41 mnislaih: right, RTFM :) 08:09:01 ah wait a minute, there is something wrong with the snapshot 08:09:04 I'll be rebuilding the docs 08:09:23 --- join: chessguy2 (n=chessguy@c-69-242-13-143.hsd1.pa.comcast.net) joined #haskell 08:10:08 how's in charge of cabal-install right now? 08:10:26 --- quit: boegel ("This computer has gone to sleep") 08:10:37 tibbe: "who"! 08:10:41 --- quit: chessguy (Nick collision from services.) 08:10:41 not "how" 08:10:43 --- nick: chessguy2 -> chessguy 08:10:53 yes, sorry 08:11:03 > permutations "who" 08:11:04 Not in scope: `permutations' 08:11:17 dcoutts: f <- readFile "abe.utf8"; let s = toUTF f. Feeding s to a textBuffer gives a worse result than without toUTF. 08:11:23 JaffaCake: documentation fixed 08:11:56 Oejet, no, you want fromUTF8 08:12:11 Oejet, you've got a text from encoded in UTF8. You want to *decode* it. 08:12:17 Doh. 08:12:18 from/file 08:13:17 SamB, so *who* is in charge of cabal-install? 08:13:19 Beautiful! 08:13:28 * Oejet cries. 08:13:34 tibbe: Define 'in charge'. 08:13:35 was it xerox? 08:13:52 gsoc ended yesterday. 08:14:28 well, who is to be yelled at? 08:14:36 Lemmih, working on it, understands it etc 08:17:05 tibbe: Lots of people understand it. 08:17:30 dcoutts, kowey, SamB: Thank you! 08:17:56 dcoutts: to/fromUTF should really be exposed in the Gtk2Hs API, I think. 08:17:58 tibbe: It's less than 1k lines so there isn't really that much to understand. 08:18:16 Oejet, we're hoping it'll be part of some improve IO lib 08:18:41 alright, what I'd like to know it who keeps track of what packages and versions are installed, cabal-install or ghc? 08:19:36 tibbe: ghc (or hugs or nhc or jhc or whatever backend you use). 08:21:21 was that a delibirate choice or did they just happen to manage it already? 08:22:41 --- quit: Itkovian (Read error: 110 (Connection timed out)) 08:22:43 The latter. 08:22:44 we came in to work one day, and there it was: ghc-pkg. ready to go, and fully bug free. that was a strange day. 08:23:45 @google site:haskell.org xml 08:23:48 http://www.haskell.org/haxr/ 08:23:48 Title: HaXR - the Haskell XML-RPC library 08:24:11 ?gsite haskell.org xml 08:24:13 http://www.haskell.org/haxr/ 08:24:13 Title: HaXR - the Haskell XML-RPC library 08:24:23 ;) 08:24:48 Lemmih, do you think it would be a good thing to have the package manager handle it later if possible? doesn't it have to keep track of some installed-packages-information anyway? 08:24:49 unfortunately, gwiki doesn't quite work as well 08:25:09 ?gwiki Lambda 08:25:11 No Result Found. 08:25:15 now I know that can't be right 08:25:32 ?google site:haskell.org/haskellwiki lambda 08:25:34 http://www.haskell.org/haskellwiki/Untypechecking 08:25:35 Title: Untypechecking - HaskellWiki 08:25:44 ?google site:haskell.org/haskellwiki Lambda 08:25:47 http://www.haskell.org/haskellwiki/Untypechecking 08:25:47 Title: Untypechecking - HaskellWiki 08:25:49 hmm 08:26:05 tibbe: Handle what later? 08:26:10 ?google site:haskell.org/haskellwiki/ Lambda 08:26:15 http://www.haskell.org/haskellwiki/Untypechecking 08:26:15 Title: Untypechecking - HaskellWiki 08:26:49 oh, it ssearching google.ca for some bizarre reason 08:26:51 I blame Cale 08:27:08 heh 08:27:15 I didn't touch it :) 08:27:20 hunk ./Plugin/Search.hs 26 08:27:21 - ,("http://www.google.ca/search?hl=en&q=site%3A", "&btnI=I%27m+Feeling+Lucky")) 08:27:24 + ,("http://www.google.com/search?hl=en&q=site%3A", "&btnI=I%27m+Feeling+Lucky")) 08:27:41 hehe 08:29:20 Lemmih, what exactly is the purpose of cabal-install, to do a dependency lookup and wget packages? 08:29:28 tibbe: Yep. 08:29:48 so no versioning or anything? 08:29:57 tibbe: And then installed the fetched packages. 08:30:02 tibbe: Versioning? 08:30:03 yes 08:30:18 I want to update installed packages to the latest version 08:30:35 or update this package if there's a new version 08:30:44 or remove this package 08:30:48 It can do that too. 08:30:57 (not the removal part, tho) 08:32:17 * Lemmih isn't even sure how to remove nhc or yhc packages. 08:33:15 what I'm trying to get to is me not having to remember to remove old package versions when I upgrade, and look for the corresponding files and remember dependencies 08:33:31 cabal-install seems to solve this in one directions (install) 08:34:48 --- join: pyronicide (n=thomas@customer-66-213-128-14.velocitus.net) joined #haskell 08:35:14 tibbe: Feel free to patch Cabal. 08:37:11 tibbe: As long as Cabal can't uninstall packages, none of the tools layered on it can't either. 08:37:59 Lemmih, I've probably mentioned this earlier but it's here I've difficulties in recognizing what piece of software is responsible for what functionality 08:38:43 Lemmih, I see Cabal (as in runhaskell Setup.hs build) as a more sophisticated make, but then it contains some package info in form of .cabal files... 08:39:03 and cabal-install looks more like a package manager 08:39:37 tibbe: Cabal is a gateway to the individual implementations. It maps commands (such as 'build' or 'install') to backend specific actions. 08:39:47 so which one is really responsible for such a thing as uninstalling, that software need a list of installed packages 08:39:57 hmm 08:40:19 I need a nice illustration to understand all of this! :D 08:41:08 --- join: Philippa (n=somewher@cpc1-clif6-0-0-cust591.nott.cable.ntl.com) joined #haskell 08:41:08 --- quit: Philippa_ (Read error: 104 (Connection reset by peer)) 08:42:27 tibbe: We have multiple Haskell implementations. That means that there isn't a single list of installed packages and there isn't a general way of uninstalling a package. 08:43:08 rm -rf works, when combined with vi, generally 08:43:16 are there any systems where that doesn't apply, I wonder? 08:43:32 shapr's nokia, perhaps. 08:45:13 Lemmih, couldn't I just do a ghc/nhc/whatever-pkg remove for all installed installations and then remove the files? 08:45:53 tibbe: Sure you could. Send the patches to Cabal. 08:47:07 I'm trying to understand what has been done before doing something so I can figure out if it's worth doing or not 08:47:27 --- join: kuribas (n=user@199.147-136-217.adsl-dyn.isp.belgacom.be) joined #haskell 08:47:55 It's not very needed, I think. 08:48:36 why would you want to remove haskell software from your system... ever? 08:48:38 here's where I'm coming from: it works well with RubyGems which makes the barrier to entry on hacking Ruby smaller, I'd like that for haskell too 08:48:39 its just not logical! 08:48:43 dons, old? 08:48:50 ;) 08:48:55 :p 08:49:15 --- join: ookk (n=ookk@81-226-212-4-no29.tbcn.telia.com) joined #haskell 08:49:16 Early twenties, I think 08:49:23 heh 08:49:27 for uninstall I need to store a list of files somewhere 08:49:35 mid-twenties ;) 08:49:54 so Setup.hs uninstall probably wouldn't make sense if the source isn't available anymore (and thus Setup.hs) 08:50:16 so the list of packages and files has to be kept independently somewhere 08:50:24 probably with cabal-install 08:50:34 *the lists 08:52:22 tibbe: Cabal is a library. The Setup script just calls the install function. 08:52:40 --- quit: reilly (Read error: 104 (Connection reset by peer)) 08:52:52 --- join: reilly (n=rfh@netblock-66-159-231-18.dslextreme.com) joined #haskell 08:53:14 --- join: xerox (n=xerox@adsl-74-236.38-151.net24.it) joined #haskell 08:53:21 --- part: JaffaCake left #haskell 08:53:44 what I meant was that I can't dump a file with uninstallation information in the source directory and then expect it to be there when I need to uninstall 08:53:55 so it has to be kept elsewhere 08:54:50 --- quit: roconnor (Connection timed out) 08:55:03 I'm not even sure how to get that uninstall information. 08:55:43 well, it has to be created when the package is built 08:56:38 it ought to be stored by ghc-pkg or whatever facility... 08:56:46 so if cabal-install pulls a source package from a mirror, creates a binary package and installs/registers it some info needs to be generated and stored even if the source package is then removed 08:57:50 or wherever cabal-install keeps its database if it has one 08:57:55 SamB, that's the question I've been thinking about, storing it with cabal-install might be better, again perhaps not 08:58:03 SamB: ghc-pkg keeps the information. But what about hugs and jhc? 08:58:21 Lemmih: does ghc-pkg keep *all* the information? 08:58:51 does cabal-install already have a database? 08:59:00 SamB: Pretty much. 08:59:14 something like cabal-install/ghc/nhc//file-list 08:59:17 okay, so maybe cabal-install should just hold onto it then... 08:59:26 oh s/ghc/ 08:59:45 --- join: snk_kid (i=snk_kid@82-35-249-204.cable.ubr01.hari.blueyonder.co.uk) joined #haskell 08:59:51 ahoy 08:59:53 one binary lib is built per implementation right? 09:00:33 tibbe: You choose what implementation to use, yes. 09:00:35 cabal support executables as well so rm -rf /usr/local/ isn't enough 09:00:35 --- join: lhz (n=lhz@82-192-161-181.str.dsl.struer.net) joined #haskell 09:00:48 yah 09:01:02 Lemmih, is the implementation a flag to cabal-install as well? 09:01:07 what happens with profiling builds etc. ? 09:01:15 tibbe: Yes. 09:01:19 * tibbe is getting tired 09:01:22 you know what amazing? absolute lack of jobs in haskell or O'caml, i've only seen one commerical job for Ocaml 09:02:06 hmm, what is a good excuse to write a parser? 09:02:09 snk_kid: what part of the world do you want to work in? 09:02:12 type "Haskell" into google ;) 09:02:13 Sponsored Links 09:02:13 Functional Prog. Jobs 09:02:13 Haskell hackers welcome! 09:02:17 * Lemmih is actually getting paid for Haskell work. 09:02:21 snk_kid: i know of a place in Oregon that does haskell 09:02:30 Lemmih: academia? 09:03:03 madpickle: Nope, "real world". 09:03:04 I expect that wherever I end up working will pay me to do Haskell at some point or other 09:03:09 Lemmih: interesting. 09:03:12 my ride home is here, I'll think about some more 09:03:12 * Igloo wonders how much that ad costs them 09:03:21 if only to figure out how to solve a problem 09:03:29 all the software developement jobs in the UK are the same typical lame jobs 09:03:34 think about *it*, sigh 09:03:35 madpickle: i was able to choose the technologies used on my current work project and hence i get paid to write haskell code at the moment 09:03:35 Igloo: yeah, I'd have thought a quick email to haskell@ would have been cheaper ... 09:03:36 snk_kid: And Igloo just got a Haskell-ish support job. 09:03:59 they don't control what lanuage you use to ponder a problem do they? 09:04:13 sure they do 09:04:15 maintenance 09:04:20 --- part: tibbe left #haskell 09:04:24 i'm not interested in getting corned with Java or anything related to finance 09:04:27 ponderings require maintenance now? 09:04:41 SamB: well... no. then again, it might.. for some.. consultants. 09:04:45 snk_kid: though haskell is used in some of the investment firms now 09:04:49 madpickle: what? 09:04:56 'twas a joke 09:05:04 i was referring to using haskell in jobs 09:05:04 dons: did they read that enron article? 09:05:18 and that after you/your crew moves on somebody has to maintain your haskell code 09:05:19 It's all the same in the UK java, c#, sometimes C++ in finance/banking, i have no interest in those what so ever 09:05:24 oh, the email from april, SamB? 09:05:27 sheesh, academic papers. are first sentences like "Program errors are common in software systems, including those that are constructed from advanced programming languages, such as Haskell" really useful except to proclaim that the author likes H? :-) 09:05:43 dons: I suppose it was probably in april 09:05:48 @google site:haskell.org enron 09:05:51 http://www.haskell.org/haskellwiki/Humor/Enron 09:05:51 Title: Humor/Enron - HaskellWiki 09:05:57 yah, that one. 09:06:04 (/me is reading http://www.cl.cam.ac.uk/~nx200/research/escH-hw.ps ) 09:06:17 its a great line :) 09:06:21 dons: in which part of the world, i don't see anything in the UK for it 09:06:31 google.com ? 09:07:04 via www.janestcapital.com/ocaml.html 09:07:11 benja_: it mentions errors! 09:07:34 presumably the next sentance is going to talk more about errors 09:07:39 ?quote DanaXu Program errors are common in software systems, including those that are constructed from advanced programming languages, such as Haskell 09:07:39 DanaXu Program errors are common in software systems, including those that are constructed from advanced programming languages, such as Haskell hasn't said anything memorable 09:07:40 dons: yeah that was the place i said was the only commerical use of ocaml i've seen 09:07:52 ?remember DanaXu Program errors are common in software systems, including those that are constructed from advanced programming languages, such as Haskell 09:07:52 Done. 09:07:56 leading up to some kind of strategy for dealing with errors or preventing them 09:08:08 snk_kid: ah well. there's lots of places (as many in this channel are employed to do hack haskell) 09:08:13 Oh, IIUC it costs them almost nothing per click, and they probably don't get many clicks 09:08:17 not as many as there should be, of course 09:08:29 SamB: yeah, it does, and it sounds like an interesting paper 09:08:37 dons: i don't mind that but i can't seem to find many in haskell either 09:08:59 Is "bottom" the answer to "WWSPJD?". At I'd like to "do bottom". 09:09:51 it makes me angry how dumb these recruitment agencies are 09:10:29 --- join: xinming (n=xinming@220.165.228.98) joined #haskell 09:10:49 --- join: sek (n=sek@ray17.doc.ic.ac.uk) joined #haskell 09:11:30 snk_kid: then start your own business specializing in haskell 09:11:39 or run a consultancy 09:11:41 does anyone have any decent excuses for me to write a parser? 09:11:46 or, HAH, start an agency that: "does not suck" 09:11:51 SamB: fun? 09:11:59 well... 09:12:06 do you need more reason than that? 09:12:09 --- quit: kowey ("Get MacIrssi - http://www.g1m0.se/macirssi/") 09:12:16 usually a good excuse to write a parser involves something to parse 09:12:17 SamB: to gain experinice in writing one ;) 09:13:31 someone suggest something nicer than XML please ;-) 09:13:44 a purely functional subset of C 09:13:51 ah 09:14:10 that would be odd! 09:14:23 not really 09:14:28 how would it work? 09:14:53 also I don't really want to parse C types... 09:15:12 well i'm just throwing out some answers for you ;) 09:15:16 er, declarations... 09:15:31 get rid of ambiguties 09:17:06 didn't haskell communty want a C parser anyways? 09:17:13 i'm sure i read in the news 09:17:26 there was someone doing that for SoC 09:18:06 maybe reading some file format? bmp or jpeg or something? 09:18:40 with a parser? 09:18:48 I want to do something with frisby... 09:18:57 well i don't think that helps, i'm assuming he/she wants to write parser combinator library? 09:19:22 huh? 09:19:38 SamB: lojban! 09:19:47 heh :) 09:20:00 that isn't a natural language? 09:20:05 or a handwritten parser in something? 09:20:15 SamB: an artificial language 09:20:31 it *is* supposed to be computer-parsable IIRC 09:20:37 hmm 09:20:52 parser combinators like parsec 09:21:10 snk_kid: who wants to write a combinator library? 09:21:16 SamB: I can send you a starting ByteStringParser, if you are willing to enhance it... 09:21:33 ooh 09:21:36 benja_: s/supposed to be // 09:21:41 SamB:i don't know, i'm tryying to find what you want to do exactly 09:21:44 SamB: that would be useful. 09:22:02 oh, I wanted to write a parser using the "frisby" library 09:22:03 kpreid: I only recall that it's supposed to be ;-) 09:22:09 ("IIRC") 09:22:19 xerox: hmm 09:22:26 I could probably do that too... 09:22:36 kpreid: but you could s/supposed to be // `o` s/ IIRC// 09:22:40 SamB: that would bring you a _lot_ of positive karma 09:22:47 --- join: eno-away (n=eno@adsl-70-137-143-195.dsl.snfc21.sbcglobal.net) joined #haskell 09:22:47 --- join: therp (n=nil@chello080108077214.34.11.tuwien.teleweb.at) joined #haskell 09:22:56 xerox: you don't have a repo I can just grab? 09:23:15 SamB: it's relatively short, and just one module, featuring a minimal design. 09:23:19 ah 09:24:29 okay, so how do you want to send it? 09:24:52 email? 09:25:13 okay... naesten at gmail dot com 09:25:50 --- quit: snk_kid ("Leaving") 09:26:13 --- join: ricky_clarkson (n=ricky@unaffiliated/rickyclarkson/x-000000001) joined #haskell 09:26:30 Hi. I'm looking for a particular tutorial, Yet Another Haskell tutorial or something. 09:26:41 It was here: http://isi.edu/~hdaume/htut/tutorial.pdf I think, but it's not. 09:26:52 ?where yaht 09:26:52 http://www.cs.utah.edu/~hal/htut/ 09:27:15 Cheers. 09:29:29 --- join: roconnor (n=roconnor@n138230.science.ru.nl) joined #haskell 09:30:01 @type interact 09:30:06 (String -> String) -> IO () 09:30:31 --- join: Psyche^ (n=Psyche@e176076237.adsl.alicedsl.de) joined #haskell 09:33:15 how odd... 09:34:06 I ran "ghc -e 'interact (unlines . map (drop 2) . lines)' > ByteStringParser.hs", pasted part of that email, and typed ^D... but all that happened when I typed ^D was that ^D appeared on the screen... 09:34:47 --- join: swiert (n=wss@sneezy.cs.nott.ac.uk) joined #haskell 09:37:04 SamB: I've had that happen too 09:37:25 something wierd about the implementation of interact? 09:37:41 or perhaps getContents? 09:38:08 it's disabling some terminal features. I don't know enough unix to say exactly what it's doing 09:38:16 for example, no line buffering and backspace 09:38:40 hmm, there really ought to be a typeclass for strings... 09:38:59 also, it's not specific to interact 09:39:04 oh? 09:39:11 ghc -e 'print =<< getContents' is also funny 09:39:16 oh 09:39:28 is it getContents or is it ghc -e? 09:39:32 I wonder if getContents is trying to make the input less buffered 09:39:33 dunno 09:39:38 I haven't tried 09:41:07 --- quit: ProfTeggy ("Servus") 09:42:00 --- quit: Patterner (Read error: 110 (Connection timed out)) 09:42:01 --- nick: Psyche^ -> Patterner 09:42:08 xerox: so... 09:42:23 * SamB wonders what to do with this 09:45:07 Create more complicated combinators in a smart way 09:46:08 why does this work: mapM (\(x,y) -> return.length =<< getPossiblesAt a (x,y)) [(x,y) | x <- [1..9], y <- [1..9]] 09:46:10 but not this: 09:46:20 mapM (return.length =<< getPossiblesAt a) [(x,y) | x <- [1..9], y <- [1..9]] 09:46:43 mapM ((return . length =<<) . getPossibles At a) .. 09:47:02 (Or even ((return . length) =<<) I am not sure.) 09:47:17 okay and the reason for that is? 09:47:18 * SamB wonders what the laws would be for typeclasses for combinators... 09:47:27 er, parsers... 09:47:34 typeclasses for parsers... 09:47:35 ookk: sure, look at the types, or do the expansion. 09:47:54 ok 09:47:58 SamB: I think one nice goal would be having more Parsec features. 09:48:02 ookk: I can show you those. 09:48:48 it worked anyway 09:49:00 ookk - The definition we are using is (f . g) = \x -> f (g x). The expression is \(x,y) -> return . length =<< getPossiblesAt a (x,y). 09:49:46 hmm... 09:50:29 \(x,y) -> (=<<) (return . length) (getPossiblesAt a (x,y)) 09:50:39 \(x,y) -> ((=<<) (return . length)) (getPossiblesAt a (x,y)) 09:50:51 ((=<<) (return . length)) . (getPossiblesAt a) 09:51:10 ((return . length) =<<) . (getPossiblesAt a) 09:51:39 (return . length =<<) . getPossiblesAt a 09:52:04 ?pl ((return . length) =<<) 09:52:05 (length `fmap`) 09:52:10 Yarrr. 09:52:33 map length . getPossiblesAt a 09:53:10 what is with the "p"s? 09:53:33 SamB: I suppose it'd be extremely cool for projects like pugs to be able to use ByteStringParse*c* as a drop-in replacement for Parsec. But I didn't investigate the details of such a goal yet. 09:53:51 SamB: good question :) 09:53:59 in particular, how come satisfy doesn't have one but most other things do? 09:54:23 p* are parsers? 09:54:31 No idea. 09:54:34 and satisfy isn't? 09:54:41 It indeed is. 09:54:43 --- join: Itkovian (n=Itkovian@d54C4B834.access.telenet.be) joined #haskell 09:55:26 OK, let's do like you said... 09:55:28 hmm, how am I supposed to figure out where to stick new things? 09:56:57 audreyt: actually, frisbys many1 behaves just like that. you need manyUntil to have it stop matching early 09:57:50 audreyt: I don't bother with posix-esque combinators, the posix semantics for regexes is braindead, having the worst of maximal and minimal munch modes. 09:59:04 hmm, I thought oneOf had error messages... whatever... 09:59:47 --- quit: Pupeno (Read error: 104 (Connection reset by peer)) 10:00:29 darcs get http://hackage.haskell.org/~paolo/darcs/ByteStringParser 10:00:32 Title: Index of /~paolo/darcs/ByteStringParser 10:00:53 So we can put together patches with code, comments, and whatnot. 10:01:36 audreyt: hmm.. I should update the frisby regex docs to mention that. 10:01:56 monadicparser type class? 10:02:03 --- quit: noclouds (Remote closed the connection) 10:02:06 xs: would be nice 10:02:13 but I don't know what laws it would need 10:03:10 darcs changes # for the informations 10:03:31 --- join: Pupeno (n=pupeno@dslb-088-072-100-234.pools.arcor-ip.net) joined #haskell 10:06:02 SamB: got your patch, applied it. 10:06:10 yeah, I see 10:06:21 JohnMeacham: oh, you left out the .txt files for the test cases... 10:06:44 SamB: compile and run the 'gentestcases' program. 10:06:50 oh 10:07:39 --- join: binary42 (n=binary42@207-172-105-28.c3-0.avec-ubr9.nyr-avec.ny.cable.rcn.com) joined #haskell 10:08:03 --- part: reilly left #haskell 10:10:08 okay... 10:10:22 why is haddock not running on ByteStringParser? 10:10:36 it dies near the end of the comment at the top... 10:10:39 What is the problem? 10:10:41 Ah. 10:10:47 Can you figure it out? 10:11:10 hmm, maybe if I read the docs for haddock... 10:11:25 Implementing more things would be fun too. 10:11:32 I should hack cabal-install, yarrr 10:11:33 yeah, I plan on it 10:12:16 @yarr 10:12:17 Swab the deck! 10:13:00 I think the deck should be clean enough at this point.... 10:13:42 Swab away the bugs! 10:13:42 ski: You have 1 new message. '/msg lambdabot @messages' to read it. 10:14:05 !!! 10:14:07 huh, a message, to me ? 10:14:39 apparent from four days ago 10:14:56 wonder why lambdabot didn't say that upon my '@yarr' 10:15:11 Yeah, that's a known bug, someone should swab it 10:15:23 :D 10:16:24 oh apparantly haddock only wants one copyright line... 10:16:31 very good error reporting, this... 10:16:36 ByteStringParser.hs:15:1: parse error in doc string: [TokPara,TokString "Primitive parser combinators for ByteStrings loosely based on Parsec.\n",TokPara] 10:16:36 --- join: genneth (n=genneth@enlil.chu.cam.ac.uk) joined #haskell 10:17:17 SamB: there you have your next parser project =) 10:17:23 eh 10:17:47 I'm not sure I can do much better using Happy... 10:18:40 SamB, btw, do you have a copy of stepcut's bytestring parser to look at? 10:19:08 dons 10:19:18 ah 10:19:54 SamB: how do you invoke haddock? 10:20:19 well at first I was invoking it just plain "haddock ByteStringParser.hs" 10:20:25 but I see that that doesn't produce output 10:20:45 so I decided to use "haddock --odir haddock --html ByteStringParser.hs" instead 10:22:12 --- join: boegel (n=boegel@86-39-72-95.customer.fulladsl.be) joined #haskell 10:22:27 please. haddocks parser is way too finicky. 10:22:48 Hmmm. 10:23:15 http://hackage.haskell.org/~paolo/darcs/ByteStringParser/ByteStringParser.html 10:23:18 I had to create my own patched version in order to get it to not choke on frisby. 10:24:00 --- join: basti_ (n=basti@p54AE3B3D.dip0.t-ipconnect.de) joined #haskell 10:24:18 xerox: you need to add your email to the repo 10:24:29 so that darcs send will send you email! 10:24:44 SamB: I think there is! 10:25:19 why is darcs asking me what the target email address is? 10:25:22 http://hackage.haskell.org/~paolo/darcs/ByteStringParser/_darcs/prefs/email is missing 10:25:50 eivuokko: is cp author email enough? 10:26:01 Yes 10:26:03 Done. 10:29:25 --- join: LordBrain (n=jim@user-0c6ssn3.cable.mindspring.com) joined #haskell 10:30:00 @pl \a -> (a,a) 10:30:01 join (,) 10:30:54 SamB: pushed, thanks. 10:33:54 --- join: sad0ur (n=sad0ur@rb1a240.net.upc.cz) joined #haskell 10:34:38 --- quit: nothingmuch (Read error: 104 (Connection reset by peer)) 10:36:23 --- join: nothingmuch (n=nothingm@bzq-84-108-53-74.cablep.bezeqint.net) joined #haskell 10:36:42 --- quit: mnislaih () 10:36:49 SamB: I've added the haddock docs to the repo, is it allright? 10:37:19 I would sooner add a script to build them personally... 10:37:47 Just if you don't have haddock, the html is handy, oh well, I don't know. 10:37:56 not a big deal 10:38:05 * xerox removes 10:38:10 might be a pain to have to merge them though 10:38:15 Yes. 10:39:56 --- join: Si\ (n=simon@host217-42-0-250.range217-42.btcentralplus.com) joined #haskell 10:42:15 --- join: chris2 (n=chris@p549D4273.dip0.t-ipconnect.de) joined #haskell 10:42:58 hmm. 10:43:06 maybe I should now test my combinator... 10:44:49 it seems to work fine, as expected ;-) 10:46:12 xerox: got it? 10:46:25 ...pushed! 10:47:11 --- quit: Plareplane (Remote closed the connection) 10:48:02 --- join: Plareplane (n=plarepla@142-165-43-211.sktn.hsdb.sasknet.sk.ca) joined #haskell 10:49:51 --- quit: Itkovian () 10:51:07 hmm, error printing could use work... 10:51:30 --- quit: boegel (Operation timed out) 11:01:16 --- join: erider (n=erider@unaffiliated/erider) joined #haskell 11:02:23 --- join: neonka (n=neonka@172-104.dsl.sky.cz) joined #haskell 11:02:32 --- join: mnislaih (n=pepe@25.Red-88-2-154.staticIP.rima-tde.net) joined #haskell 11:08:43 --- join: boegel (n=boegel@86-39-72-95.customer.fulladsl.be) joined #haskell 11:09:13 --- quit: jak ("Leaving") 11:11:49 --- quit: erider (Read error: 104 (Connection reset by peer)) 11:13:22 --- join: erider (n=erider@unaffiliated/erider) joined #haskell 11:18:05 --- join: Amran (n=Amran@212.60.73.7) joined #haskell 11:22:17 --- nick: eno-away -> eno 11:23:01 --- quit: roconnor (Read error: 110 (Connection timed out)) 11:23:04 --- quit: nealc_ ("reconnecting") 11:25:43 --- join: merus (n=merus@cpe-69-133-56-231.cinci.res.rr.com) joined #haskell 11:29:56 --- join: svref (n=dm@dsl093-230-014.lou1.dsl.speakeasy.net) joined #haskell 11:31:37 Hm... how to compute (mod x y) for x and y of type Float? 11:34:35 how about subtracting y from x until y is greater than x, then returning the remainder? 11:35:10 so (mod 9.5 5) == 4.5 11:35:48 i assume you dont want to just convert them to integers 11:35:49 Amran: Perhaps use a more efficient algorithm? 11:36:10 Oejet: yeah there are probably way more efficient ones 11:36:16 this just off the top of my head 11:36:43 or maybe y*(x/y - (floor x/y)) 11:36:55 > (\ x y -> x (floor $ x / y) * y) 9.5 5 11:36:57 Occurs check: cannot construct the infinite type: a = b -> a 11:36:57 Expec... 11:37:12 probably the most efficient way is to figure out how to call C's function. 11:37:31 > (\ x y -> x - (floor $ x / y) * y) 9.5 5 11:37:32 Add a type signature 11:38:03 PaulAJ: What's that '$' do? 11:38:33 OK, I give in trying to program on the fly. But the basic idea is to find out highest multiple y that is less than x. 11:38:37 he's using it instead of parens 11:38:52 $ is application 11:39:00 > (\ x y -> x - (fromIntegral $ floor $ x / y) * y) 9.5 5 11:39:02 4.5 11:39:04 f $ x = f x 11:39:06 Bingo! 11:39:11 but it has different precedence 11:39:40 It could have been ... 11:39:55 > (\ x y -> x - (fromIntegral (floor (x / y))) * y) 9.5 5 11:39:56 4.5 11:40:47 Easiest way to read an expression with $ in it is to see it as a pipeline running right to left. So (x/y) gets piped into floor, and then into fromIntegral. 11:41:15 okay, I'll try thinking about it that way. 11:41:19 eivuokko: ping 11:41:25 PaulAJ: How about '.' 11:41:34 OK, here goes... 11:41:48 > (\ x y -> x - ((fromIntegral . floor) x / y) * y) 9.5 5 11:41:50 0.5 11:41:53 i tend to use . and only use $ on the last thing... 11:42:00 Nope. Didnt work. 11:42:10 Ahhh. 11:42:19 > (\ x y -> x - ((fromIntegral . floor) (x / y)) * y) 9.5 5 11:42:20 4.5 11:42:48 @pl (\ x y -> x - (fromIntegral . floor $ x / y) * y) 11:42:49 liftM2 (.) (-) (join . (((*) . fromIntegral . floor) .) . (/)) 11:43:06 What does @pl do? 11:43:08 --- nick: eno -> eno-away 11:43:16 shows the pointfree 11:43:18 --- quit: neonka () 11:43:31 which is not really very readable in this instance 11:43:37 but i was curious 11:43:41 Which is why its often known as pointless notation. 11:44:20 @pl (\ x y -> x - (fromIntegral $ floor $ x / y) * y) 11:44:20 liftM2 (.) (-) (join . (((*) . fromIntegral . floor) .) . (/)) 11:44:37 Interesting. I suppose its one way of proving equivalence of functions. 11:44:47 --- quit: mnislaih () 11:46:23 so it seems '$' and '.' both pipe, but '.' has higher precedence? 11:46:28 is this correct? 11:46:51 not really 11:47:15 Not quite. . is function composition. Its defined as f . g = \x -> f (g x) 11:47:28 > map ((+1) $ (*2)) [1,2,3] 11:47:29 add an instance declaration for (Num (a -> a)) 11:47:34 > map ((+1) . (*2)) [1,2,3] 11:47:35 [3,5,7] 11:47:47 Whereas $ is simple application. f $ x = f x 11:48:06 (f . g) x = f $ g x 11:48:08 you cant say something like ord . 'a' but you could say ord $ 'a' 11:48:17 but f . x /= f x 11:48:19 aha - I think I see 11:48:19 > ord 'a' 11:48:21 97 11:48:32 > id . 6 11:48:33 add an instance declaration for (Num (a -> b)) 11:48:39 > ord $ 'a' 11:48:40 97 11:48:43 hmm 11:48:50 > ord . 'a' 11:48:50 Couldn't match `a -> Char' against `Char' 11:48:53 see 11:48:57 :) 11:49:00 now confused - that worked in hugs (id . 6) 11:49:15 id $ 6 11:49:19 > id $ 6 11:49:20 6 11:49:22 --- quit: sek ("Client exiting") 11:49:26 > id . 6 11:49:27 add an instance declaration for (Num (a -> b)) 11:49:42 ah no - my mistake 11:49:49 '$' worked in hugs, '.' didn't 11:49:52 same as here 11:50:07 --- quit: LordBrain (Read error: 104 (Connection reset by peer)) 11:50:07 :( 11:50:10 id . 6 tries to become id ( 6 x) 11:50:20 > id ( 6 4) 11:50:21 add an instance declaration for (Num (t -> a)) 11:50:44 In other words 6 is not a function. 11:50:51 ok 11:51:00 @type . 11:51:02 parse error on input `.' 11:51:02 --- join: LordBrain (n=jim@user-0c6ssn3.cable.mindspring.com) joined #haskell 11:51:07 @type (.) 11:51:09 forall c a b. (b -> c) -> (a -> b) -> a -> c 11:51:28 I always like the error messages when an undergraduate tries to evaluate sin .3 11:51:34 > sin .3 11:51:36 add an instance declaration for (Num (a -> b)) 11:51:38 Ignore the forall bit. What it says is that the two arguments to . are both functions. 11:51:40 PaulAJ: you mean, in other words the compiler doesn't see *how* 6 could be a function 11:51:48 > sin 0.3 11:51:49 0.29552020666133955 11:51:55 > sin (.3) 11:51:56 add an instance declaration for (Num (a -> b)) 11:52:10 No, the compiler knows perfectly well that 6 :: Integer 11:52:27 Or to be more precise, (Num a) => 6 :: a 11:52:30 @type 6 11:52:32 forall t. (Num t) => t 11:52:36 yeah 11:52:52 suppose (a->b) were an instance of Num 11:53:13 @jam radar 11:53:14 Maybe you meant: faq map 11:53:15 Well, for starters it would have to define fromIntegral (id) 11:53:17 :( 11:54:17 As far as the types go you could do it, but I can't imagine anything very meaningful for an implementation. 11:54:58 Gotta go. Bye. 11:55:02 --- join: mnislaih (n=pepe@25.Red-88-2-154.staticIP.rima-tde.net) joined #haskell 11:55:45 hmm hmm 11:55:50 --- part: Amran left #haskell 11:55:51 I didn't know which was a built-in command... 11:56:04 --- part: svref left #haskell 12:07:47 --- join: gwright (n=user@c-68-83-240-95.hsd1.nj.comcast.net) joined #haskell 12:11:08 --- join: mait (n=mait@213-35-164-96-dsl.kjj.estpak.ee) joined #haskell 12:11:34 --- nick: mathrick|away -> mathrick 12:12:10 --- join: roconnor (n=roconnor@g33218.upc-g.chello.nl) joined #haskell 12:18:18 --- part: gwright left #haskell 12:22:55 --- join: aleko (i=1000@adsl-75-4-151-109.dsl.emhril.sbcglobal.net) joined #haskell 12:25:58 --- join: dolio (n=dolio@nr10-216-68-188-34.fuse.net) joined #haskell 12:26:11 --- quit: dolio (Read error: 104 (Connection reset by peer)) 12:28:21 --- quit: tennin (Read error: 113 (No route to host)) 12:28:56 hmm, the error handling in Frisby isn't great is it? 12:29:15 Prelude Text.Parsers.Frisby> runPeg (return (text "hi")) "hello" 12:29:15 "*** Exception: runPeg: no parse 12:33:20 --- quit: Cheery ("Download Gaim: http://gaim.sourceforge.net/") 12:33:21 --- quit: boegel ("This computer has gone to sleep") 12:34:58 --- join: boegel (n=boegel@86-39-72-95.customer.fulladsl.be) joined #haskell 12:42:10 --- join: xian (i=cp@nconc.de) joined #haskell 12:42:22 --- quit: mait ("Ex-Chat") 12:44:51 --- quit: boegel ("Leaving") 12:44:54 --- join: dolio (n=dolio@nr10-216-68-188-34.fuse.net) joined #haskell 12:47:10 --- nick: eno-away -> eno 12:47:34 --- join: dbremner (n=dbremner@c-24-16-73-193.hsd1.mn.comcast.net) joined #haskell 12:47:48 --- join: hyrax42 (n=hyrax42@modemcable253.102-201-24.mc.videotron.ca) joined #haskell 12:48:00 --- join: maitrix (n=mait@213-35-164-96-dsl.kjj.estpak.ee) joined #haskell 12:48:58 --- quit: merus ("Leaving") 12:53:25 * xerox has under his hands a new Hope css theme... 12:55:58 --- quit: maitrix ("Ex-Chat") 12:56:55 --- join: ihope (n=foo@c-71-205-100-59.hsd1.mi.comcast.net) joined #haskell 12:56:56 --- join: finchely_ (n=Miranda@206.211.101.166) joined #haskell 12:59:26 --- quit: xerox () 12:59:56 --- quit: astrolabe (Read error: 113 (No route to host)) 13:00:17 --- join: maitrix (n=mait@213-35-164-96-dsl.kjj.estpak.ee) joined #haskell 13:01:06 --- join: xerox (n=paolo@adsl-74-236.38-151.net24.it) joined #haskell 13:01:16 --- quit: Oejet ("Leaving.") 13:03:12 --- join: Itkovian (n=Itkovian@d54C4B834.access.telenet.be) joined #haskell 13:05:20 --- join: Oejet (i=proxyuse@cpe.atm2-0-1071147.0x3ef2a7ea.boanxx10.customer.tele.dk) joined #haskell 13:07:28 --- quit: Stinger_ (Remote closed the connection) 13:12:05 --- quit: erider ("I don't sleep because sleep is the cousin of death!") 13:22:25 --- quit: d-bug ("Leaving") 13:22:38 @users 13:22:41 Maximum users seen in #haskell: 235, currently: 209 (88.9%) 13:23:21 --- quit: chessguy (" HydraIRC -> http://www.hydrairc.com <- Leading Edge IRC") 13:24:07 --- quit: gour ("Quit (http://xchat-gnome.navi.cx/)") 13:25:22 --- join: Rizenine (n=RizeNine@159.218.3.30) joined #haskell 13:25:26 wow, percentage 13:25:38 everybody loves a good percentage 13:29:15 --- quit: aleko (Read error: 110 (Connection timed out)) 13:30:00 i have f :: b -> IO a, and i want to make g :: b -> IO [a], that produces a list lazily. i'm currently using: g b = unsafeInterleaveIO (f b >>= \x -> g b >>= \xs -> return (x:xs)); then, else where: g b >>= mapM_ process, but this really leaks space. i can't see why. any ideas? 13:30:08 --- quit: sad0ur ("leaving") 13:32:35 xs: do you really want the unsafeInterleaveIO? 13:32:50 swiert, is there another way to get lazy io sematics? 13:33:15 if you're using that, you need to do unsafeInterleaveIO g b 13:33:21 not on the whole composition 13:34:05 why won't g b = sequence (map f (repeat b)) work? 13:34:37 because IO is strict, so it doesn't terminate? 13:35:00 yes, io is strict so you need unsafeInterleaveIO, but you need to put it on g b 13:35:28 norpan, but it is? g b unsafeInterleaveIO (...blah..)? 13:35:35 s/g b/& =/ 13:35:37 because that is the action you need to make non-strict 13:36:25 hmm. i don't understand? 13:37:01 err, i mean on f b of course 13:37:19 ahh, hmm. 13:37:24 sorry 13:37:40 ooh. 13:37:52 i'll try this, thanks 13:42:03 i do not thing this will work. it attempts to strictly construct the entire list before returning. this computation will not terminate.. so the unsafeInterleaveIO must cover the recursion, not f a? 13:42:30 no 13:43:08 unsafeInterleaveIO will bind to x without actually performing the action f b 13:43:08 --- join: linden (n=jk@molb.org) joined #haskell 13:43:28 so that you will get the list immediately without any actions being performed 13:43:46 as the only "real" IO being done is by f 13:44:25 Won't that still construct an infinite list? 13:44:29 but in, g b = f b >>= \x -> g b >>= \x -> return (x:xs), g b is infinite? 13:44:53 He needs to delay the tail of the list, too. 13:45:12 oh, yeah 13:46:05 actually, delaying the tail is sufficient 13:46:22 so i was right from the beginning, but i was wrong 13:46:33 --- quit: Si\ ("Download Gaim: http://gaim.sourceforge.net/") 13:46:40 it's too late in the evening for this 13:46:58 :) 13:47:07 alas, this solution has a space leak 13:47:23 --- quit: mnislaih () 13:49:14 hey, i should know, I did exactly that unsafeInterleaveIO stunt in http://norpan.org/~martin/fps/Data/ByteString/UTF8.hs 13:49:17 stupid me 13:50:16 hehe :) 13:51:03 hm maybe tail recursion will help 13:51:44 how will you make it non-strict with tail recursion 13:51:52 if you figure that out, please show me :) 13:52:58 --- quit: lhz ("Leaving") 13:53:29 --- quit: Rizenine ("Ex-Chat") 13:53:59 hi, how can i write a function that gives abbcccdddd for abcd? 13:55:17 that sounds like a pretty pointless function 13:55:53 i cant think of a way to express it 13:56:07 is that a homework problem? 13:56:12 basically 13:56:19 is it your homework? 13:56:20 --- join: astrolabe (n=astrolab@astrolabe.plus.com) joined #haskell 13:56:24 jbalint, foldl? 13:56:28 not from a class 13:56:37 I'd use [1..], map, repeat, (++) 13:56:43 and maybe some others 13:56:48 oh no replicate 13:56:53 yeah ;) 13:57:00 replicate, (++) and foldl 13:57:04 ok, thanks 13:57:04 join . zipWith replicate [1..] 13:57:19 --- join: johnnowak (n=johnnowa@207-38-204-65.c3-0.wsd-ubr2.qens-wsd.ny.cable.rcn.com) joined #haskell 13:57:30 hand that in for homework 13:57:53 > join . zipWith replicate [1..] $ "abcd" 13:57:54 "abbcccdddd" 13:58:00 hey, it worked :) 13:58:20 master of the join 13:58:22 ?type putStrLn . show 13:58:24 forall a. (Show a) => a -> IO () 13:58:33 join == concat? 13:58:50 ?type join 13:58:52 forall a (m :: * -> *). (Monad m) => m (m a) -> m a 13:58:59 yeah 13:59:09 ohh, right 13:59:11 heh 14:00:12 --- quit: roconnor (Connection timed out) 14:01:27 --- quit: Itkovian () 14:02:48 --- quit: basti_ ("good night") 14:04:03 xs: What kind of code is using g that you get space leaks? 14:11:13 --- part: Oejet left #haskell 14:13:37 --- quit: dcoutts (Remote closed the connection) 14:15:27 --- quit: ookk ("This computer has gone to sleep") 14:15:37 --- join: zarvok (n=ccasingh@UNIX36.andrew.cmu.edu) joined #haskell 14:21:40 --- join: Itkovian (n=Itkovian@d54C4B834.access.telenet.be) joined #haskell 14:23:54 So "class Foo a b | a -> b" means that for every possible a, there's only one b that can go with it? 14:24:12 --- quit: dbremner ("Quitting!") 14:25:20 That sounds right. 14:25:29 Given a, you can determine what b is. 14:25:37 Ah. 14:26:47 --- join: chessguy (n=chessguy@c-69-242-13-143.hsd1.pa.comcast.net) joined #haskell 14:36:54 --- quit: maitrix (Read error: 110 (Connection timed out)) 14:40:38 --- quit: johnnowak ("Lost terminal") 14:42:45 dolio, g produces a list of images, i then process and render these images. the processing is an arrows implementation of a stream processor and the rendering is blitting to gtk2hs 14:46:20 --- quit: ths (Read error: 110 (Connection timed out)) 14:46:40 * alec loves gtk2hs 14:47:22 --- join: dcoutts (n=duncan@dhcp0878.gradacc.ox.ac.uk) joined #haskell 14:48:09 Ah, hmm... 14:48:46 That's a lot more complicated than the toy examples I was playing around with. 14:50:17 in re my earlier groaning about scientific articles, /me recognizes the fact that other textual sources can be just as weird. I just found this on Wikipedia: 14:50:20 "Not everyone enjoys hearing soundbites. [citation needed]" 14:50:50 s/just as weird/just as weird about the obvious/ 14:51:36 Heh. I was browsing the star trek articles recently, and one of them has something roughly equivalent to: "Fact: Beverly Crusher is hot." 14:52:05 ouch =) 14:52:54 Oh no. Somebody took it down. 14:53:32 @google "Fact: Beverly Crusher is hot." 14:53:34 No Result Found. 14:53:47 clearly a conspiracy 14:53:48 Well, it wasn't that blunt. But that was the general idea. 14:53:52 --- quit: kpreid () 14:55:57 Here we go: 14:56:02 http://en.wikipedia.org/w/index.php?title=Beverly_Crusher&oldid=61658316 14:56:13 "Crusher's look develops all the way through the series, until being thought of as the sexiest of the Star Trek women in the final series and the first STTNG movie, Generations. Troi, Uhura and Seven of Nine have also held this title on seperate occasions." 14:56:28 --- join: kfish (n=conrad@195.8.233.220.exetel.com.au) joined #haskell 14:58:10 lol 14:58:52 --- join: heatsink (n=heatsink@strip.crhc.uiuc.edu) joined #haskell 14:59:05 if I didn't take Wikipedia so seriously, I would be tempted to slap a "[citation needed]" on that now ;) 14:59:47 (although I suppose they might be able to find one...) 14:59:55 --- quit: Itkovian () 15:00:03 That would be even more bizarre. 15:00:38 I suppose they could cite The Offical Doctor Crusher Fan Page or something. :) 15:01:21 --- join: Itkovian (n=Itkovian@d54C4B834.access.telenet.be) joined #haskell 15:03:00 --- join: monochrom (n=trebla@vlan500-110-213.maconline.mcmaster.ca) joined #haskell 15:03:53 --- quit: monochrom (Client Quit) 15:04:51 --- quit: takuan_ ("bye") 15:05:10 --- quit: dolio (Remote closed the connection) 15:06:31 --- quit: Pete_I (Read error: 104 (Connection reset by peer)) 15:06:31 --- quit: rashakil_ (Success) 15:07:00 --- join: essiene (n=essiene@196.220.26.194) joined #haskell 15:07:08 --- join: Pete_I (n=Crystals@cpe-24-24-102-214.midsouth.res.rr.com) joined #haskell 15:07:17 --- quit: Khisanth (Read error: 110 (Connection timed out)) 15:07:28 --- join: rashakil_ (n=rashakil@cpe-72-224-117-93.nycap.res.rr.com) joined #haskell 15:07:44 --- quit: iblechbot (Read error: 113 (No route to host)) 15:08:09 --- join: Khisanth (n=Khisanth@pool-71-247-22-39.nycmny.east.verizon.net) joined #haskell 15:11:20 --- join: joelr1 (n=joelr@114.Red-83-33-250.dynamicIP.rima-tde.net) joined #haskell 15:11:25 good evening! 15:12:56 --- join: johnnowak (n=johnnowa@207-38-204-65.c3-0.wsd-ubr2.qens-wsd.ny.cable.rcn.com) joined #haskell 15:13:45 --- quit: Pete_I (Connection reset by peer) 15:13:46 --- quit: rashakil_ (Connection reset by peer) 15:14:23 --- join: Pete_I (n=Crystals@cpe-24-24-102-214.midsouth.res.rr.com) joined #haskell 15:14:38 --- join: rashakil_ (n=rashakil@cpe-72-224-117-93.nycap.res.rr.com) joined #haskell 15:15:50 does anyone know how to make darcs generate patches in a format suitable for input to patch? 15:16:07 what kind of patches? 15:16:17 --- quit: sjanssen (Read error: 60 (Operation timed out)) 15:16:24 patch patches? 15:16:35 I mean, does "darcs diff" do what you want? 15:16:55 --- quit: cods ("migration") 15:17:34 --- join: sjanssen (n=nnsjanss@CPE-75-81-169-38.neb.res.rr.com) joined #haskell 15:21:11 --- quit: plisk (Read error: 113 (No route to host)) 15:21:28 --- join: Si\ (n=simon@host217-42-0-250.range217-42.btcentralplus.com) joined #haskell 15:22:33 SamB: well, it sort of does but the output does not look like a patch that i received 15:22:48 oh? 15:22:52 this is a patch that i'm looking at http://www.it.uu.se/research/group/hipe/snapshots/patch-otp-0804-4-x86-sse2-exceptions 15:23:01 it looks nothing like the darcs diff output 15:24:27 * SamB doesn't have darcs diff output handy to compare 15:26:08 ok, darcs diff -u does it 15:26:10 You might want to use -u 15:26:16 eivuokko: thanks! 15:26:40 Heh, I was late anyway :-) 15:29:57 --- join: ths (n=ths@88-106-139-84.dynamic.dsl.as9105.com) joined #haskell 15:37:00 --- quit: johnnowak ("Lost terminal") 15:40:55 --- quit: chessguy (" HydraIRC -> http://www.hydrairc.com <- IRC for those that like to be different") 15:43:00 --- join: erider (n=erider@unaffiliated/erider) joined #haskell 15:46:05 --- quit: ex_nor ("This computer has gone to sleep") 15:47:46 --- quit: erider ("I don't sleep because sleep is the cousin of death!") 15:49:25 --- join: mnislaih (n=pepe@25.Red-88-2-154.staticIP.rima-tde.net) joined #haskell 15:50:46 --- join: jak (n=jak@85-210-218-157.dsl.pipex.com) joined #haskell 15:55:20 mnislaih, Pong. 15:55:59 eivuokko: did you mention early today or yesterday that you have added parallelism to the testsuite maybe ? 15:56:14 Yeah 15:56:22 It's buggy, I have revised patch. 15:56:39 cool, are the patches up in the main repo ? 15:57:10 Nope, the bad patches (with few bugs) are in an email, and revised patch is on my hd :-) 15:57:29 I'd like to give it a try tomorrow hopefully. Send me the patches if you will, mnislaih@gmail.com 15:58:10 Gladly :-) 15:58:40 thanks :) 16:00:26 this came as a surprise to me today 16:00:44 > groupBy (==) [1,2,1,1,1,3,3] 16:00:46 [[1],[2],[1,1,1],[3,3]] 16:00:57 are you expected to sort before you groupby? 16:01:03 Yes. 16:01:26 Well, that's the common case, anyway. 16:01:27 hmm...okay 16:01:47 > groupBy (==) (sort [1,2,1,1,1,3,3]) 16:01:48 [[1,1,1,1],[2],[3,3]] 16:02:32 http://haskell.org/ghc/docs/latest/html/libraries/base/Data-List.html#v%3Agroup says "group function takes a list and returns a list of lists such that the concatenation of the result is equal to the argument" 16:02:43 (group is a special case of groupBy) 16:02:58 * lispy implemented splitOn :: Eq a => a -> [a] -> [[a]] and found it to be much easier to use than some of the others proposed 16:03:24 alec: cool 16:03:47 > group [1,1,3,3,2,1,3] 16:03:48 [[1,1],[3,3],[2],[1],[3]] 16:04:26 i also found <+> :: String -> String -> String, (as opposed to the pretty printer version) worth having 16:04:44 lispy: seems to me that when wrangling strings, the more general :: Eq a => [a] -> [a] -> [[a]] would be more useful and really not much harder to use in the special case 16:05:03 benja_: perhaps 16:05:27 benja_: in my case it takes just as many key strokes 16:05:31 benja_: so i wouldn't notice 16:05:40 then again, I come from the Python world and miss my 'split' and 'join' all the time ;) 16:05:50 @type join 16:05:51 forall a (m :: * -> *). (Monad m) => m (m a) -> m a 16:05:55 we have join! ;) 16:06:00 ;) 16:06:27 > join $ group [1,1,3,3,2,1,3] 16:06:27 [1,1,3,3,2,1,3] 16:06:43 ah nice, join . group = id for lists :) 16:06:49 --- join: syntaxfree (n=dnavarro@201.12.102.188) joined #haskell 16:07:02 but with the Eq constraint 16:07:28 @type (join . group) 16:07:29 forall a. (Eq a) => [a] -> [a] 16:07:31 "The 2006 Fields medals, awarded every four years and described as the Nobel Prize for Mathematics, have been awarded at the International Congress of Mathematicians. The winners are Grigory Perelman (famous for the ideas underlying the proof of the Poincare and Thurston geometrization conjectures) ? who declined the prize, Terence Tao (a child prodigy famous for proving there are arbitrarily long arithmetic progressions of primes, but who works main 16:08:05 syntaxfree: so he did decline 16:08:08 odd 16:08:19 guess he'll be even more famous now :) 16:08:22 "John Ball, president of the International Mathematical Union, said that he had urged Perelman to accept the medal, but Perelman said he felt isolated from the mathematics community and "does not want to be seen as its figurehead." Ball offered no further details of the conversation." 16:08:28 yeah, smart marketing. 16:09:44 --- quit: mnislaih () 16:10:22 --- quit: heatsink ("Leaving") 16:10:51 --- part: syntaxfree left #haskell 16:13:47 --- join: Pseudonym (n=ajb@lindor.alicorna.net) joined #haskell 16:14:50 --- join: stepcut (n=user@207.67.194.2) joined #haskell 16:17:12 --- quit: lollan (Read error: 104 (Connection reset by peer)) 16:17:27 --- join: lollan (n=lollan@cpc2-tref1-0-0-cust655.cdif.cable.ntl.com) joined #haskell 16:17:53 --- quit: lollan (Read error: 104 (Connection reset by peer)) 16:17:59 --- quit: joelr1 () 16:20:04 --- join: cods (n=root@tuxee.net) joined #haskell 16:22:45 --- quit: Poeir (Read error: 54 (Connection reset by peer)) 16:22:59 --- join: Poeir (n=poeir@74.136.199.58) joined #haskell 16:30:13 --- part: Si\ left #haskell 16:31:17 --- quit: der_eq (Remote closed the connection) 16:31:25 --- join: aleko (i=1000@adsl-75-4-151-109.dsl.emhril.sbcglobal.net) joined #haskell 16:31:59 --- quit: Averell (Read error: 110 (Connection timed out)) 16:34:52 --- join: Averell (i=averell@p3m/member/Averell) joined #haskell 16:36:36 morning all 16:36:48 does anyone have an example of using HUnit with cabal? 16:37:08 ie. how/where to specify runTests 16:40:28 --- join: modulo7 (n=a@e178254158.adsl.alicedsl.de) joined #haskell 16:40:32 --- part: nilsi left #haskell 16:41:16 --- join: dolio (n=dolio@nr10-216-68-188-34.fuse.net) joined #haskell 16:43:42 --- quit: ex__nor ("This computer has gone to sleep") 16:43:53 --- quit: modulo7 ("Leaving") 16:45:47 if i have a cabalized project, is there a way to easily ghci load it? 16:45:58 maybe just load the main module? 16:46:55 hmm...that doesn't seem to be honoring {-# OPTIONS_GHC ... #-} 16:47:06 maybe i need to tell ghci to allow extensions... 16:47:13 --- part: jak left #haskell 16:48:21 OPTIONS_GHC doesn't work? Is it on the first line of the file? 16:48:54 Anyway, ghci know nothing about Cabal, so it's not always straightforward to load it in ghci if you got files to preprocess. 16:48:56 ah, i neded -fglasgow-exts 16:49:06 that's too bad 16:49:16 ghci should become cabal aware :) 16:49:20 Rather, Cabal should know about cabal. 16:49:25 Err, know about ghci 16:49:31 setup ghci .. 16:49:35 well, how would :r work in that case? 16:49:56 Hmm, good point. 16:50:32 It's mainly a problem with preprocessing, anyway. 16:50:42 Or is there other catches? 16:53:39 --- quit: chris2 ("Leaving") 16:53:50 hmm.. 16:54:10 well, i told ghci to load my Main.hs but it doesn't load all my modules since some of them aren't used from anywhere yet 16:54:28 Hm 16:54:37 if ghci were cabal aware, i would expect those modules to be known about even if not currently in scope 16:54:46 but right now i have to load them by themselves to get them up 16:54:56 and doing that unloads all my other modules :( 16:55:56 :m +Foo.Bar 16:56:22 in this case all i really want is to load some boiler plate i'm using to talk to my database and run some sql queries to see how i need to construct the real queries my program will do ;) 16:56:42 but i find this is somewhat of a problem in general...i've wanted similar functionality with the darcs source 16:57:07 Yes, with darcs sources it would often be nice. 16:58:24 okay, so i added the module i want to load to Main.hs and hit :r and it's kinda what i wanted 16:58:29 so i guess that's my workaround for now 16:58:53 :) 16:59:57 --- quit: zarvok ("BitchX-1.1-final -- just do it.") 17:01:01 although, now when i run code from main i get: 17:01:03 : 17:01:05 Main_stub.o: unknown symbol `_Main_zdftraveltimes_closure' 17:01:07 so not all is well 17:01:38 Hmm. 17:02:09 hmm...now even cabal failed with undefined references (but to a different module) 17:02:13 i should make clean... 17:02:19 I think so.. 17:02:32 oh, i bet i need to configure 17:02:33 I sort of fail to see why your ghci found .o 17:02:52 Unless you pointed it to search for them in dist 17:03:24 When using Cabal, you shouldn't have .o .hi etc next to the source, those should go in dist. 17:03:26 no 17:03:42 yeah, i let VH build this project so it should be fine 17:04:22 okay so this is what happened 17:04:42 looks like VH updated the .cabal file 17:04:49 then i tried building outside of VH 17:05:15 but i needed to do runghc Setup.lhs clean; runghc Setup.lhs configure; runghc Setup.lhs build 17:06:35 --- quit: Pete_I ("May teh source be with you.") 17:07:43 well, doing that solved one of my problems but not the Main_stub.o problem 17:08:38 Where is the Main_stub.o? 17:08:56 oh weird 17:08:58 it's in src 17:09:03 with all my other source 17:09:42 iirc i have it because i'm building a dll 17:09:57 i think it's generated by ghc when it wants to compile with my DllMain.c 17:09:57 It is because of foreign export/wrapper 17:10:06 okay, yeah 17:10:08 --- quit: BCoppens ("Konversation terminated!") 17:10:13 that makes sense 17:13:30 \quit leaving 17:13:38 --- quit: swiert ("leaving") 17:14:55 Btw, how do you build dll? Same way as vshaskell build does? 17:15:37 it's probably similar, but i built the post-compile hook thingy from scratch 17:15:49 Right 17:16:02 Build lib, then call ghc --mk-dll with the lib and other things? 17:16:10 yeah 17:16:22 I was hoping we could get DLL-builds in Cabal for 6.6, and hence for new VH...but there's not a whole lot of support for it. 17:16:22 i do that in Setup.lhs 17:16:52 Yeah, that's the way VH build does it as well. 17:16:55 ah, i asked about it on one of the mail lists and Krashmir didn't say much other than he had to do something similar for VH 17:17:46 With new ghc 6.6 you might have a bit easier time. --make works with --mk-dll, and your probably just need to change the name of executable. 17:18:26 --- join: chessguy (n=chessguy@c-69-242-13-143.hsd1.pa.comcast.net) joined #haskell 17:18:58 i'm just learning haskell and i'm captivated by it, but i can't think of any good learning projects to practice it. does anyone have any suggestions? 17:19:09 *please 17:19:22 aleko: what is your background? 17:19:29 aleko: what are you interested in? 17:19:39 lispy: C#, python (imperative) 17:19:59 aleko: for a learning project i wrote an embedded language that compiles down to procmail syntax so that i could filter my mail more easily 17:20:55 that's in the same field as what i'm doing: i'm writing a lexer/parser that outputs xml 17:21:00 aleko: http://codersbase.com/index.php/Autoproc 17:21:36 aleko: do you like math? you could write some library for math 17:22:11 lispy: i've never done any math coding, so I wouldn't know what to write 17:22:33 hmm..okay 17:22:51 whatelse do you like? You could write something to look at your mp3 collection and generate playlists 17:23:29 aleko: what i'm getting at is, a good starting project involves something you're already interested in and have a decent idea how to do it 17:23:35 then start hacking away with haskell 17:24:14 thanks for the help. i might to something with the internet protocol stack... maybe an irc client 17:24:25 --- join: edwardk (n=ekmett@c-68-42-205-162.hsd1.mi.comcast.net) joined #haskell 17:24:29 aleko: ah, yeah that could be fun 17:24:37 aleko: make a general purpose IRC library 17:25:53 but the problem is, I wouldn't feel like I was programming functionally (I checked lambdabot's source code, and pretty much every function looks imperative) 17:26:27 --- quit: mboes ("Lost terminal") 17:27:33 well, haskell is pretty good at imperative coding 17:27:50 but you definitely want to learn functional if you're just starting out 17:28:53 i think i'll keep at my current project, which I have some background in (and I can look at your procmail language for inspiration) 17:29:01 thank you *very* much 17:29:37 np, i hope you enjoy haksell 17:29:39 haskell* 17:30:19 --- join: xerox_ (n=paolo@adsl-243-242.37-151.net24.it) joined #haskell 17:31:04 haskell *is* the world's finest imperative language :) 17:31:31 damn straight 17:31:47 hence the "pretty good"...now if we could just get the finest to be "good" or "great" ;) 17:32:19 when it can read my mind, it will be ready ;) 17:32:35 the first time i read the "gentle introduction" (not so gentle) it blew my mind after years of imperative coding 17:34:06 Blew your mind how? 17:34:17 everything was different 17:34:44 a language with complete referential transparency, with such powerful functions... 17:35:05 and no side-effects without monads was a change 17:35:16 but i must eat dinner now 17:36:17 aleko: yeah it kinda rocked me to the core too, hence why i'm still here ;) 17:36:31 --- join: shekmalhen (n=karl@modemcable016.233-201-24.mc.videotron.ca) joined #haskell 17:37:23 --- quit: xerox (No route to host) 17:41:22 --- quit: jgrimes (Read error: 110 (Connection timed out)) 17:42:03 --- quit: kuribas (Remote closed the connection) 17:43:42 --- join: mpc (n=mpc@c-66-31-203-107.hsd1.ma.comcast.net) joined #haskell 17:43:48 --- join: jgrimes (n=jgrimes@Lee-10-101.rh.ncsu.edu) joined #haskell 17:45:24 --- quit: Plareplane (Remote closed the connection) 17:46:29 --- join: Plareplane (n=plarepla@142-165-43-211.sktn.hsdb.sasknet.sk.ca) joined #haskell 17:47:10 is there way to have apache automatically serve up syntax highlighted files when just looking at .hs files? 17:47:50 so for example, if you browse to a directory on my server with source code in it and click on a .hs file i want to serve up a page taht looks just like the raw source but with some syntax highlighting added 17:48:07 You could rewrite the urls atleast...but then you better have some way of downloading the originals. 17:48:33 well, it's a darcs repo, so if they want the source, they can use darcs or get the tar ball 17:48:51 so i don't feel so bad about giving them a htmlize version... 17:48:56 but maybe it's more hassle than its worth 17:49:28 I don't know solution right away, but I'd assume it's fairly easy to code up yourself. 17:49:46 it is possible, tho 17:50:03 shekmalhen: any idea what it's called or where to look to learn to set it up? 17:50:17 one second 17:50:59 code2html maybe? http://www.palfrader.org/code2html/manual.html 17:51:01 Title: Code to HTML converter 17:51:45 lispy, well, you'll need an handler 17:52:10 but... what I can't figure out is a way to get the raw file, without syntax hilighting 17:52:37 --- quit: Jaak ("leaving") 17:52:57 --- join: hikozaemon (n=hikozaem@166.130.244.43.ap.yournet.ne.jp) joined #haskell 17:57:39 shekmalhen: hmm.. 17:57:51 i can use geshi for syntax highlighting i bet 17:57:57 i have a geshi file for most languages 17:58:37 --- quit: Plareplane (Remote closed the connection) 17:59:19 might do the trick :) 17:59:20 --- join: Plareplane (n=plarepla@142-165-43-211.sktn.hsdb.sasknet.sk.ca) joined #haskell 17:59:45 * kfish finds numericprelude (HUnit + cabal) fu 18:00:02 but i should work on this later 18:00:38 Would hscolor work? 18:01:50 * edwardk wonders if kfish is making a martial arts reference, or is missing one, or possibly 4 letters on the end there ;) 18:02:00 coloring the files isn't the hard part (i don't think). It's letting the user get to the raw version and how to turn it on in the first place 18:02:22 * lispy notes that kung fu actually means 'hard work' 18:02:33 lispy, fu = ? 18:02:34 :) 18:02:41 the chinese use a different word...'wushu'? for martial arts 18:02:53 wikipedia gets vanadalized a lot.. but they do do a pretty good job of cleaning it up quickly. 18:02:57 --- quit: Plareplane (Remote closed the connection) 18:03:21 sorry was responding to an old thread 18:03:56 I don't think setting a file type handler is too hard in apache. 18:04:15 Although I don't have it installed right now to test. 18:04:46 --- join: Plareplane (n=plarepla@142-165-43-211.sktn.hsdb.sasknet.sk.ca) joined #haskell 18:04:55 yeah it should be pretty easy 18:05:03 Action add-footer /cgi-bin/footer.pl 18:05:04 AddHandler add-footer .html 18:05:10 that's an example from the apache manual 18:05:22 that adds a footer to all .html files 18:05:27 yeah 18:05:29 Yeah. 18:05:53 lispy, maybe with a bit of modrewrite magic? (to have access to the raw file) 18:06:53 --- quit: Plareplane (Client Quit) 18:07:26 so i'm sort of thinking that clicking on the file should give you the output of geshi highlight and then maybe in that output is a link to the original...but yeah how to link up to the original is not clear 18:07:40 because if i understand these handlers they would get in the way 18:08:47 --- join: mrevelle (n=mrevelle@69-175-132-101.chvlva.adelphia.net) joined #haskell 18:09:00 --- quit: aleko (Read error: 110 (Connection timed out)) 18:09:00 --- join: syntaxfree (n=dnavarro@201.12.102.188) joined #haskell 18:09:38 oh, or maybe the original source could be placed in a text box in side the page and you have to copy&paste to get it? that would be annoying tho 18:09:49 Incredibly o.O 18:10:10 lispy, no 18:10:11 :) 18:10:30 can't javascript manipulate clipboards by now? 18:11:41 you had any problems installing ghc on debian sid recently? 18:12:12 --- join: mjk (n=mjk@221.0.126.211) joined #haskell 18:12:21 shekmalhen: yeah, i run amd64 so i'm a second class citizen... 18:12:53 Likewise. 18:12:58 lispy, but... I'm on a plain old IA32 machine... but it seems to have a problem with libgmp and libgmp-dev 18:13:24 my debian etch box can't be upgraded because ntp-server depends on ntp, and ntp conflicts with ntp-server. 18:13:36 dylan, something similar 18:13:39 (in 32bit land) 18:14:34 I assume people uploaded a new version of one without a new version of the other 18:14:52 so it looks like i can use modrewrite + cgi to redirect the source requests to a geshi script that could maybe accept a parameter for "raw" output 18:16:03 thankfully, ghc is still working fine. 18:16:12 :/ 18:16:21 --- join: noclouds (n=mhfan@60.166.39.122) joined #haskell 18:17:18 lispy, How about having highlighting via rewrite and Foo.hs?hl, and add READMEs or something in directory listings to tell the user? 18:17:35 --- quit: stepcut ("whee") 18:17:52 --- nick: eno -> eno-away 18:18:51 apt-get just gives up on this box... 18:20:03 --- quit: kfish (Read error: 104 (Connection reset by peer)) 18:22:43 * syntaxfree has given up apt-get and package management in general. 18:22:58 Linux distros should just use .app bundles like OS X does. 18:23:29 I'm trying to figure Parsec out but I can't make sense of the docs. 18:25:10 ugh 18:25:23 yeah, installing in global places sucks! 18:25:45 uninstalling sucks worse! 18:26:13 --- join: kfish (n=conrad@195.8.233.220.exetel.com.au) joined #haskell 18:26:37 you should just be able to remove the application icon, and maybe a directory in off your homedir if it is taking too much space... 18:26:37 dylan: iirc ntp-server is obsolete and should be removed 18:26:50 ibid: yes, but ntp seems to require it 18:27:38 --- join: kisu (n=kisu@2001:618:400:0:0:0:d375:4cd6) joined #haskell 18:27:53 dylan: how does that manifest itself? 18:27:54 --- join: ex_nor (n=exnor@ppp113-151.static.internode.on.net) joined #haskell 18:28:10 ibid: it seems to be a recursively incorrect dependency. 18:28:15 *recursive. 18:28:27 but, after an update, it seems sane now 18:28:27 dylan: that's not what i asked, how do you see it requires it? 18:29:00 yes, earlier it said "ntp requires ntp-server, but ntp-server cannot be installed" 18:29:35 dylan: but this is fixed now, you say? 18:29:38 yeah 18:29:46 it looked like an incomplete upload. 18:30:26 and you say you are on testing? 18:30:36 yes, on the x86 machine. 18:30:38 that should not happen then 18:31:00 i'd like to see the evidence myself, but cannot now if it is fixed :) 18:31:03 it's not as bad as on amd64 -- a new vim-runtime comes around that is too new for the vim-perl package... 18:31:22 dylan: are you sure you are on testig and not unstable? 18:31:32 yes, only 'etch' sources on that server. 18:31:49 it probably was close to 2 days since I last did an update, until just now 18:32:08 hm 18:32:32 i mean, on unstable that kind of stuff is common, but it should not happen in testing 18:33:00 why are Parsec parsers do actions? 18:33:06 x86-testing usually works great. The only problems I have is amd64, and that is usually caused by cross-architecture stuff like vim-runtime being newer than compiled stuff. 18:33:16 syntaxfree: because it is convenient to write them that way 18:33:20 dylan: and that should not happen in testing 18:33:28 (even in amd64) 18:33:31 as opposed to >>= I figure. 18:33:34 also because parsec's parser types are in Monad 18:33:44 But why aren't they like String->Bool or something? 18:33:46 It's the reason I use sid on my 64bit machine now 18:33:59 dylan: huh? 18:34:20 ... because String->Bool is not very useful? 18:34:43 you want to get the parsed value, you know! 18:34:53 ibid: at the time -- back in June or so, to upgrade my testing box required removing vim. 18:35:00 ibid: so I upgraded to sid. 18:35:10 I can make absolutely no sense of Parsec! 18:35:10 like, if you were parsing a program, you'd want the parser to return the program! 18:35:21 @paste 18:35:21 http://paste.lisp.org/new/haskell 18:35:22 not just say "yes this is a program!" 18:35:35 @where ByteStringParser 18:35:36 I know nothing about bytestringparser. 18:35:46 syntaxfree pasted "what is this doing??" at http://paste.lisp.org/display/24579 18:35:56 @where+ ByteStringParser http://hackage.haskell.org/~paolo/darcs/ByteStringParser 18:35:56 Done. 18:36:04 @where ByteStringParser 18:36:05 http://hackage.haskell.org/~paolo/darcs/ByteStringParser 18:36:11 first it says "char '('" 18:36:26 then it calls the parser function itself. 18:36:33 THEN it has another "char" function. Huh? 18:37:11 ByteStringParser is a much shorter module 18:37:14 the Parsec docs are written like a research paper, not like a user's guide. What does "char" do? 18:37:28 dylan: well, that's strange anyway :) 18:37:29 @type Parsec.char 18:37:30 char parses a single character? 18:37:30 Couldn't find qualified module. 18:37:40 char :: Char->Bool? 18:37:48 @type Text.ParserCombinators.Parsec.char 18:37:49 forall st. Char -> Text.ParserCombinators.Parsec.Char.CharParser st Char 18:38:09 Prelude Text.ParserCombinators.Parsec> parseTest (char 'a') "a" 18:38:09 'a' 18:38:14 --- quit: Beelsebob|Mini () 18:38:19 Prelude Text.ParserCombinators.Parsec> parseTest (char 'a') "b" 18:38:19 parse error at (line 1, column 1): 18:38:19 unexpected "b" 18:38:19 expecting "a" 18:38:23 I've seen that behaviour, but I don't understand it. 18:38:45 the parser expects a char 'a'. Then, when it recognizes, it returns 'a'? 18:39:51 yeah 18:40:03 sources may be useful for understanding! 18:40:48 char :: Char -> CharParser st Char 18:40:48 char c = satisfy (==c) show [c] 18:40:52 I know that (forall a. Maybe a -> [a]) means a function that turns maybes into lists and works for all a, but what does simply (forall a. Maybe a) mean? Is it even inhabited? 18:41:27 perhaps isJust inhabits it? 18:41:29 @type isJust 18:41:31 forall a. Maybe a -> Bool 18:41:37 aorb = do { char 'a'; aorb;} <|> do { char 'b'; aorb;} <|> return () 18:41:39 er, no... 18:41:47 but isJust should be able to *take* one... 18:41:53 @type Nothing 18:41:54 forall a. Maybe a 18:41:55 *Main> parseTest aorb "aba" 18:41:56 well, it's not a function type at all 18:41:56 () 18:41:57 gr! 18:42:02 ah, yeah, there we go! Nothing! 18:42:26 aha 18:42:44 eh 18:42:49 syntaxfree: try this instead 18:43:04 many (char 'a' <|> char 'b') 18:43:36 many? 18:43:43 the docs don't mention that. 18:43:58 @type Text.ParserCombinators.Parsec.many 18:44:00 forall a st tok. Text.ParserCombinators.Parsec.Prim.GenParser tok st a -> Text.ParserCombinators.Parsec.Prim.GenParser tok st [a] 18:44:04 syntaxfree: what docs are you reading? 18:44:07 @google parsec docs 18:44:11 http://imagine.gsfc.nasa.gov/docs/dictionary.html 18:44:11 Title: Imagine the Universe! Dictionary 18:44:12 http://www.cs.uu.nl/~daan/download/parsec/parsec.html#UserGuide 18:44:17 @google daan parsec 18:44:20 http://www.cs.uu.nl/~daan/parsec.html 18:44:31 --- join: jargonjustin (n=jargonju@c-24-7-64-241.hsd1.ca.comcast.net) joined #haskell 18:45:07 http://www.cs.uu.nl/~daan/download/parsec/parsec.html#many 18:45:17 --- nick: mathrick -> mathrick|sleep 18:45:28 greenrd: forall a. Maybe a is inhabited by Nothing and Just undefined 18:45:55 and undefined 18:46:01 yes 18:46:07 dons: but that is difficult to work with 18:46:13 :) 18:46:26 I think I don't understand what a Parser is to begin with. That's not clear in the docs. 18:46:41 what does it sound like? 18:46:53 ?foldoc parser 18:46:54 it is a thing that you can use to parse input! 18:46:55 *** "parser" foldoc "The Free On-line Dictionary of Computing (27 SEP 03)" 18:46:55 parser 18:46:55 18:46:55 An {algorithm} or program to determine the 18:46:55 syntactic structure of a sentence or string of symbols in some 18:46:55 syntaxfree: are you familiar with predictive parsing and LL(1)? 18:46:57 [7 @more lines] 18:46:57 usually text 18:47:05 that I understand. 18:47:12 I don't understand what the Parser type in Parsec is :) 18:47:28 --- join: kpreid (n=kpreid@24-52-49-37.bflony.adelphia.net) joined #haskell 18:47:29 it is the way Parsec represents parsers 18:47:41 apparently it's not a type, it's a monad like IO. Or at least a functor. 18:47:48 syntaxfree: in parsec, a parser is an abstract entity 18:47:49 it is a type constructor 18:48:01 @kind Text.ParserCombinators.Parsec.Parser 18:48:03 * -> * 18:48:06 @kind Text.ParserCombinators.Parsec.GenParser 18:48:08 * -> * -> * -> * 18:48:15 @kind Text.ParserCombinators.Parsec.CharParser 18:48:17 * -> * -> * 18:48:24 Oh, god. Maybe I need to go back to monad school. 18:48:32 actually, Parser itself is type synonym 18:48:33 I was getting along just fine with IO and Random. 18:48:34 syntaxfree: and there is a function (i forget which) that turns this abstract entity into a function 18:48:34 @hoogle Parser 18:48:36 Language.Haskell.Parser :: module 18:48:36 Text.ParserCombinators.Parsec.Prim.Parser :: type Parser a 18:48:36 Distribution.InstalledPackageInfo.ParseResult :: data ParseResult a 18:49:01 ibid: runParser, maybe? 18:49:35 runP does too, but I think that is probably exported 18:49:44 er, probably *not* exported 18:49:47 --- quit: mauke (Read error: 110 (Connection timed out)) 18:50:31 syntaxfree: the reason Parser is declared as a monad is that the programmer can reuse generic monad thingies for Parser if they so choose 18:50:50 syntaxfree: it's for convenience, not an absolute requirement 18:50:53 such as finger-memories! 18:50:55 I don't understand do notation for Parsers. 18:51:07 translate it into >> and >>= then 18:51:20 I probably won't understand those either. I'll try though. 18:51:22 syntaxfree: do notation is just syntactic sugar for >>= 18:51:27 I know. 18:52:03 @google Parsec tutorial 18:52:07 syntaxfree: but the basic idea is "do a ; b" means the parser that parses input that matches a and b in sequence 18:52:08 http://pcl.cs.ucla.edu/slides/Parsec99.html 18:52:08 Title: PARSEC Workshop '99 Slides 18:52:16 @google Haskell Parsec tutorial 18:52:19 http://conferences.oreillynet.com/cs/os2006/view/e_sess/8898 18:52:19 Title: O'Reilly Open Source Convention - July, 24-28, 2006 - Portland, OR 18:52:31 @google site:haskell.org Parsec tutorial 18:52:36 http://www.haskell.org/haskellwiki/Books_and_tutorials 18:52:36 Title: Books and tutorials - HaskellWiki 18:52:40 hmm... 18:52:44 hrm, google offline and then paste the url perhaps? 18:52:51 @google site:haskell.org/tmrwiki Parsec 18:52:53 http://www.haskell.org/tmrwiki/ArrowsIntroduction 18:52:54 Title: ArrowsIntroduction - TmrWiki 18:52:57 hmm... 18:53:03 SamB: ! 18:53:16 sorry 18:53:21 incidentally... 18:53:25 how does one google offline? 18:53:31 * ibid never understood the usefulness of @google 18:53:36 SamB: off the irc line :) 18:53:51 who uses google anyway? i use webcrawler 18:53:55 ie on a web browser 18:54:11 webcrawler? 18:54:13 lispy: me, duh! 18:54:15 webcrawler?? 18:54:18 I coded up @google after all! 18:54:24 syntaxfree: did what i said two minutes ago make any sense to you? 18:54:42 oh, I lost it in the flood. 18:54:52 syntaxfree: but the basic idea is "do a ; b" means the parser that parses input that matches a and b in sequence 18:54:58 (repost) 18:54:58 so. 18:55:08 x = do {a; x; b} means? 18:55:36 that parser never succeeds :) 18:56:02 there is no finite input that contains itself as a substring 18:56:04 the usefullness of @google is to demystify the process of finding information? or maybe to save typing for finding easy to find things... 18:56:16 and telling people where they are 18:56:24 SamB: yes, it makes sense when you do find it the first time 18:56:33 obviously I was carried away 18:56:37 SamB: but not if you flood the channel with failed attempts 18:57:21 parens = do{ char '('; parens; char ')'; parens} <|> return () 18:57:28 isn't that the same thing, ibid? 18:57:42 syntaxfree: no, because you now use <|> 18:57:46 ack 18:57:49 oh. 18:57:52 syntaxfree: are you familiar with gramars? 18:57:56 +m 18:58:04 context-free ones 18:58:07 I really need to find the notebook where I wrote more material for http://www.haskell.org/tmrwiki/SamBronson_2fInProgress 18:58:09 Title: SamBronson/InProgress - TmrWiki 18:59:40 context-free grammars, yes. Parsers, no. 18:59:52 I learned that stuff in linguistics, a long long time ago :) 19:00:39 syntaxfree: well, in computer programming, we like to construct *parse trees* or other results out of parsed things 19:00:59 we don't like to just say "yeah it parsed" or "no that did not parse!" 19:01:01 heh, when I tried to look for some mac related stuff in google, why do I always type "Appel" ? 19:01:11 @google Appel 19:01:11 heh 19:01:13 http://www.cs.princeton.edu/~appel/ 19:01:13 Title: Andrew Appel's Home Page 19:01:29 and parse trees are? 19:01:45 syntaxfree: you may know them as structral trees 19:01:48 syntaxfree: they are datastructures! 19:01:54 Wood 19:02:00 for instance... 19:02:07 type BFInstrs = [BFInstr] 19:02:07 data BFInstr = Loop BFInstrs 19:02:07 | Prev | Next 19:02:07 | Decr | Incr 19:02:07 | GetC | PutC 19:02:10 syntaxfree: for example, the phrase tree in natural language analysis 19:02:16 deriving (Show) 19:03:07 syntaxfree: but my point was, if you have a production foo -> a b 'c' d in a grammar, the corresponding parser is foo = do { a; b; char 'c'; d } 19:03:28 hmm. 19:03:39 syntaxfree: and if you have two productions foo -> bar and foo -> blah, then that becomes foo = bar <|> blah 19:03:39 It's getting late, here. 19:03:45 it's early here :) 19:03:47 5am 19:03:53 ah, that part I understood :) 19:03:58 ibid: nono! that is EXTREMELY late 19:04:04 @localtime syntaxfree 19:04:08 SamB: i woke up at 4am 19:04:12 syntaxfree: do you know BF? 19:04:24 what's BF? 19:04:29 I know BNF. 19:04:32 * dcoutts is going to bed a 6:30 once he gets on a train 19:04:33 brainf*ck 19:04:37 ach 19:04:42 --- quit: mathrick|sleep (Read error: 54 (Connection reset by peer)) 19:04:45 Ah. Heard about it. 19:05:19 syntaxfree: the tricky point is, the translation i gave works only if the gramar is not left-recursive 19:05:54 syntaxfree: so that requires grammar massage for most languages :) 19:06:06 the one with [] for loops, + and - for changing the value at the address, < and > for changing the address, and , and . for I/O? 19:06:14 well, infix operator stuff at least 19:07:17 --- join: mathrick|sleep (n=mathrick@ip75.siubuk.com) joined #haskell 19:09:18 --- join: rashakil__ (n=rashakil@cpe-72-224-117-93.nycap.res.rr.com) joined #haskell 19:09:37 --- join: aleko (i=1000@adsl-75-4-151-109.dsl.emhril.sbcglobal.net) joined #haskell 19:11:22 or, you know... 19:11:46 BF is no Shakespeare. 19:11:52 ?google shakespearelang 19:11:55 http://shakespearelang.sourceforge.net/report/shakespeare/shakespeare.html 19:11:55 Title: The Shakespeare Programming Language 19:13:01 ?google perligata 19:13:04 http://www.csse.monash.edu.au/~damian/papers/HTML/Perligata.html 19:13:05 Title: Lingua::Romana::Perligata -- Perl for the XXIimum Century 19:15:25 That is funny. 19:17:23 --- join: ikegami-- (n=ikegami@61.206.113.16.myip.interlink.or.jp) joined #haskell 19:17:28 --- quit: rashakil_ (Read error: 113 (No route to host)) 19:17:36 --- quit: falconair () 19:17:51 --- join: Evi1M4chine (n=Miranda@dsl46-159.pool.bitel.net) joined #haskell 19:23:12 --- quit: mrevelle ("Leaving") 19:26:27 --- quit: essiene (""Zzzzzzzzzzzzzzzzzzzzzzzzzzzz"") 19:29:06 --- join: ihope_ (n=foo@c-71-205-100-59.hsd1.mi.comcast.net) joined #haskell 19:30:08 --- quit: Evi1M4chine (Read error: 104 (Connection reset by peer)) 19:30:18 --- join: Evi1M4chine (n=Miranda@dsl46-159.pool.bitel.net) joined #haskell 19:30:38 ?users 19:30:40 Maximum users seen in #haskell: 235, currently: 195 (83.0%) 19:31:59 --- join: Beelsebob|Mini (n=Beelsebo@minibob.quixotic.org.uk) joined #haskell 19:32:05 Hah. Perelman indeed turned down the Fields Medal. 19:32:44 now he's _really_ famous 19:33:43 It's all part of his devious plan. 19:34:09 maths guys are so wacky 19:34:21 I wonder if Oleg would turn down a Lambda Medal? 19:35:22 anyone want to go to St. Petersburg and install GHC on Perelman's laptop (and give him a laptop?). 19:35:31 I think he'd make a good haskell programmer 19:35:40 Now that he doesn't want to do math 19:35:46 right! 19:36:00 Because monads etc are so far from it 19:36:06 yeah 19:36:12 --- quit: Evi1M4chine (Client Quit) 19:36:14 it'll be a refreshing oasis 19:36:26 I bet he'd rather become and ajax hacker 19:36:34 hah 19:37:58 "arXiv.org servers are currently under very heavy load due to demand for Grisha Perelman.s papers, published only as arXiv.org e-prints, which are available below.." 19:38:51 heh 19:39:22 maybe its a viral marketing campaign 19:39:29 Somebody who 'can' read that paper didn't know about it until the award was given? 19:39:30 and the papers are for some new flavour of Coke 19:39:43 seems unlikely, doesn't it .. 19:40:03 slashdotted 19:40:19 I wonder if there'd be a rush on type systems papers if we had a real Lambda Medal 19:40:45 oh, that's the Turing prize, I suppose 19:40:50 You are really sold on this Lambda Medal idea 19:40:56 hehe 19:41:13 you're not saying you don't want one?? 19:41:26 I am not worthy, whatever it is. 19:41:42 I suggest you refuse to accept it then 19:41:55 it will make you only more worthy 19:42:15 And I shall also denounce the whole lambda deal and write explicit for loops. 19:42:47 that would be in character 19:43:30 --- join: coffeemug (n=coffeemu@pool-71-247-209-26.nycmny.east.verizon.net) joined #haskell 19:43:42 --- quit: aleko (Read error: 110 (Connection timed out)) 19:43:50 hey everyone 19:44:16 * Korollary whips up his enterpricey IDE that inserts public void interface extends zigzag() everywhere 19:44:30 I get weird issues when compiling with ghc 6.5 19:44:40 basically I have a simple function 19:45:14 main = do putStr "> " 19:45:14 x <- getLine 19:45:14 putStr x 19:45:22 indenting is wrong 19:45:31 when I evaluate main from ghci or hugs 19:45:35 it behaves as I would expect 19:45:41 --- join: erider (n=erider@unaffiliated/erider) joined #haskell 19:45:42 ">" shows up 19:45:45 I type something in 19:45:52 and the program prints it back 19:45:59 --- quit: ihope (Connection timed out) 19:46:02 but when I compile it using ghc and run the exe 19:46:03 oh, that's buffered IO outside of ghc, though 19:46:17 you'll want to: putStr "> " >> hFlush stdout 19:46:21 I get a blank screen 19:46:24 or set the IO to be unbuffered 19:46:42 stdout is bufferred by default? 19:46:47 hmm 19:46:53 does putStrLn flush automatically? 19:46:56 yep 19:47:00 because that's the behavior I encounter 19:47:02 ahhh, I see 19:47:21 but you want to either explictly flush, or set unbuffered IO 19:47:32 ?hoogle Buffere 19:47:33 No matches found 19:48:00 hSetBuffering NoBuffering 19:48:25 hSetBuffering stdout NoBuffering -- actually 19:48:35 ?docs System.IO 19:48:36 http://haskell.org/ghc/docs/latest/html/libraries/base/System-IO.html 19:48:50 hmm 19:49:00 what would you recommend? 19:49:09 I'd just do an hFlush stdout 19:49:12 and why is bufferring turned on by default? 19:49:18 this seems sort of unintuitive 19:49:21 efficiency, presumably 19:49:22 not something one would expect 19:49:40 same thing in perl, if I remember my perl 19:49:47 you have to set $| = 1 or something 19:49:50 Isn't stdout line-buffered by default? 19:49:55 the problem is that handles aren't flushed automatically on the automatic close that comes from program exit 19:50:10 efficiency makes sense :) 19:50:19 Lemmih: yeah, I think so 19:50:41 which is the expected behaviour with any system based on C stdio 19:51:04 yeah 19:51:41 ie. it's nothing to do with efficiency 19:51:50 well 19:51:53 if I were to do 19:52:07 printf "..."; read... 19:52:14 it will work as expected 19:53:28 import System.IO 19:53:28 main = do 19:53:28 hSetBuffering stdout NoBuffering 19:53:28 putStr "> " 19:53:28 s <- getLine 19:53:30 print (reverse s) 19:53:36 $ ./a.out 19:53:36 > xyz 19:53:37 "zyx" 19:53:37 Not in scope: `xyz' 19:53:51 --- nick: eno-away -> eno 19:54:05 That is true 19:54:56 yeah, I understand 19:55:00 I fixed it by doing hFlush 19:55:22 it's just a general concern 19:55:37 this kind of stuff turns off newcomers 19:56:04 when default behavior is pretty much at odds with what one would expect 19:56:08 it only comes up if you try to print a line without a \n, as in many languages though 19:56:12 i.e. perl and C 19:56:17 I actually don't know why cout flushes when a cin intervenes in C++. 19:57:05 coffeemug: oh, you might want to use 'readline' instead :) 19:57:06 dons: the same thing happens when, say, you blat binary data to stdout with fps and don't hClose stdout 19:57:09 since then you get line editing 19:57:26 kfish: sure. yay for buffering 19:57:46 though now, what was the recent change to buffering SimonM put in 19:57:53 Lemmih: rememeber that? 19:58:10 dons: well, no, i'd suggest that on program exit opened handles should be flushed and closed (as they are in stdio) 19:58:43 dons: Simon changed the buffering? 19:58:45 that may well be true. do we need to submit a patch, you think? 19:58:56 Lemmih: yeah, maybe just in gHC though 19:58:58 ie. forcing the user to close a handle they didn't explicitly open is a bit wierd 19:59:23 hmm 19:59:43 " * patch applied (packages/base): default to NoBuffering on Windows for a read/write text file 19:59:46 Simon Marlow 19:59:47 readline? 19:59:49 " 19:59:49 http://www.haskell.org/pipermail/cvs-all/2006-June/047985.html 19:59:51 Title: patch applied (packages/base): default to NoBuffering on Windows for a read/writ ... 19:59:52 where's that? 19:59:58 coffeemug: yep, in -package readline 20:00:04 let me find an example for you 20:00:11 lisppaste2: url 20:00:11 To use the lisppaste bot, visit http://paste.lisp.org/new/haskell and enter your paste. 20:00:17 it's ok, I'll find on hoogle 20:00:18 thanks 20:00:23 s <- readline "lambdabot> " -- read stdin 20:00:24 case s of 20:00:24 Nothing -> error "" 20:00:25 Just x -> ... 20:00:38 a better putStr, since you get history and editing and so on 20:01:01 Korollary pasted "cout flushes because of cin" at http://paste.lisp.org/display/24582 20:02:04 hmm 20:02:07 what do you mean? 20:02:12 --- quit: chessguy (" HydraIRC -> http://www.hydrairc.com <- The professional IRC Client") 20:02:23 I get history and editing with regular getLine/putStr 20:02:45 hmm? 20:02:51 do you have some fun termio setup? 20:03:05 just plain old windows xp with Visual Haskell 20:03:08 ah 20:03:22 but I can build without visual haskell, still works 20:03:26 so I guess it's a windows thing 20:03:37 yeah 20:04:07 ok, so according to the patch default is no bufferring now, it just didn't make it to 6.5 yet, right? 20:05:09 wasn't it a patch for file IO though? 20:05:34 I don't know if this is namedropping or not, but I met Terry Tao once. 20:05:42 Pseudonym: Get out! 20:05:54 * Pseudonym hangs head in shame 20:05:59 He won't remember me. 20:06:00 Pseudonym: You should not wash that hand! 20:06:14 It's the same hand I shook Phil Wadler's with. 20:06:27 And Phil's hand shook both Curry and Howard. 20:06:34 the same hand!? wow! 20:06:42 At the same conference, no less. 20:06:52 There you go. 6 degrees of Pseudonym 20:06:56 Indeed. 20:06:57 whoa Curry <- Psudonym -> Howard 20:07:09 No, Curry <- Wadler -> Howard 20:07:17 dons: should I send an email to GHC list about this? 20:07:19 --- join: svens (n=svens@i3ED6E68E.versanet.de) joined #haskell 20:07:31 coffeemug: possibly, yes. simonM should reply with something interesting 20:07:42 As far as reflected glory goes, I feel like a raytraced sphere over an infinite chessboard. 20:07:47 ok, I'll do that 20:07:53 and now for some positive feedback 20:07:59 haskell is pretty freakin' amazing 20:08:06 coffeemug: perhaps mention that you felt the behaviour wasn't desirable for a newbie? 20:08:12 but be delicate about it.. ;) 20:08:27 I gave it a whirl by trying to write a small Lisp interpreter 20:08:33 if you can produce some evidence that other languages get it right (i.e. C++) that would be good 20:08:40 coffeemug: oh, how'd that go? 20:08:40 and I literally couldn't believe how far I got in so little time 20:08:43 with so little code 20:08:54 hehe. have you seem the 'Scheme in 48 hours.. in haskell" tutorial? 20:08:58 that's considering that I'm pretty much a Haskell newbie 20:09:09 I heard about it but I didn't look at it 20:09:28 Oh, dons, where's the plugin? Hmmm? 20:09:30 I'm doing it on my own and given that I'm new to haskell the speed I'm progressing at is really unbelievable 20:09:34 coffeemug, dons: `man stdio` might provide some evidence :) 20:09:57 If the main function returns to its original 20:09:57 caller, or the exit(3) function is called, all open files are closed 20:09:57 (hence all output streams are flushed) before program termination. 20:09:57 Other methods of program termination, such as abort(3) do not bother 20:09:57 about closing files properly. 20:10:07 ok. so that's one issue 20:10:22 my last Lisp interpreter was in C++ and I even though I'm a pretty advanced C++ programmer it took me an order of magnitude more time 20:10:25 (and I actually thought they were flushed -- seems like a bug) 20:10:25 coffeemug: That's not surprising. I think how fast you progress in Haskell is a function of how bad your habits were before you started. 20:10:38 The worse your habits, the slower you are. 20:10:46 --- quit: Beelsebob|Mini () 20:10:56 $ ./freetheorem 20:10:56 id :: a -> a 20:10:56 f_1 . id = id . f_1 20:11:05 now, to plugin-inafy 20:11:06 Cool. 20:11:14 BTW, you don't have to make it a process. 20:11:16 my habbits were average 20:11:17 It's a library. 20:11:26 just the language is amazing 20:11:35 I'm still not sure if it's specific to the problem domain I chose 20:11:36 Pseudonym: yeah, but will it diverge? 20:11:39 Nope. 20:11:47 because haskell seems to be very good specifically at this kind of stuff 20:12:05 I can't guarantee that a future bug won't make it diverge, but it's designed not to. 20:12:08 ok 20:12:10 --- quit: edwardk (Connection timed out) 20:12:40 My local copy now supports arrows, BTW./ 20:12:51 I've already discovered two interesting things. 20:12:55 dons, I don't believe that ghc guarantees flushing/closing file handles before program terminatin. It's related to it apparently being impossible to guarantee finalisation in GC. 20:13:07 Two of the arrow axioms aren't axioms. They're consequences of the free theorem for first. 20:13:10 or something like that 20:13:30 hmm. 20:13:37 I've seen cases where one must explicitly flush before terminating 20:13:45 yeah, I think I have too 20:15:15 dcoutts: so no holida 20:15:23 ys, but all patches pushed? 20:15:39 dons, I'm getting on a train in two hours 20:15:44 cool 20:15:51 dons, no more patches, I've been packing 20:16:08 I did look at the python string api 20:16:10 right, just checking :) 20:16:13 ah, yes 20:16:14 some things we might consider later 20:17:25 i'll make a todo now 20:17:25 --- join: _frederik_ (n=frederik@islay.ra.phy.cam.ac.uk) joined #haskell 20:17:25 we've got join but not split right? 20:17:25 we have a split, but not _the_ split 20:17:25 ah, our split is on a single byte/char 20:18:17 python's is on a string, though I expect people usually use just a char 20:18:19 --- join: ex__nor (n=exnor@dhcp047238.wireless.unsw.EDU.AU) joined #haskell 20:18:24 --- quit: wchogg (Remote closed the connection) 20:18:31 --- join: wchogg (n=wchogg@eh-112-119-11.resnet.wisc.edu) joined #haskell 20:18:44 --- join: dgoldsmith (n=dgoldsmi@pool-72-68-103-184.nwrknj.east.verizon.net) joined #haskell 20:18:48 ok, just sent an email about the bufferring issue 20:19:02 coffeemug: yeah, that's fine 20:19:02 --- join: tennin (n=max@ppp-68-95-68-155.dialup.stlsmo.swbell.net) joined #haskell 20:19:14 god I love this 20:19:22 --- quit: svens_ (Read error: 110 (Connection timed out)) 20:19:24 I literally got a lisp interpreter in half a day 20:19:29 though the larger issue of flushing on existing seems to be a harder problem (and not one you were thinking about) 20:19:33 exiting. 20:19:44 coffeemug: want to write a tutorial?? :) 20:19:52 dons: I absolutely will 20:19:54 "Lisp in 6 Hours... In Haskell" 20:19:57 It's a rite of passage to write a Haskell tutorial. 20:20:05 or a lambdabot plugin 20:20:09 Right. 20:20:16 I'll publish it on defmacro.org 20:20:25 hmm, someone should really write a plugin to write tutorials... 20:20:43 I owe it to the haskell community anyway after posting an article about some minor roadblocks that turn people off 20:20:45 coffeemug: you should also CC. haskell-cafe@haskell.org (or at least here) 20:20:47 coffeemug: Are you the guy who wrote that intro to fp article at defmacro.org? 20:20:52 *FreeTheorem> putStrLn $ freeTheoremStr "idArr :: A a a" 20:20:53 idArr >>> arr f_1 = arr f_1 >>> idArr 20:20:59 yeah, I'm the same coffeemug 20:21:08 Pseudonym: nice! 20:21:33 coffeemug: We've exchanged emails about it (re: lazy eval and i/o, etc.) 20:21:53 Korollary: what's your email address, let me look it up :) 20:22:05 coffeemug: koray ... @gmail 20:22:09 It assumes that any type with one polymorphic argument is a Functor, and any type with two arguments is an Arrow. 20:22:22 Because they have the nice mapping properties that make nice free theorems. 20:23:39 yep, I remember that 20:23:57 it's actually pretty amazing how such tutorials open up people's minds a little 20:24:13 I received like 200 emails from people just saying they'll pick up a book on haskell or lisp 20:24:24 presenting a problem from their home domain, in the new language, is a good idea 20:24:27 now if we could only get rid of the minor roadblocks 20:24:30 since they understand the difficulties already 20:24:57 I had to get through quite a few annoying things to start doing some "real" haskell stuff 20:25:05 and I feel these are completely unnecessary 20:25:14 coffeemug: that's interesting. care to elaborate? 20:25:24 (its a known issue that windows support is not as good as it could be) 20:25:40 so I see you're running 6.5? why's that? 20:26:00 dons: well, one issue was that standard graphics library that's bundled with ghc and hugs doesn't work on windows 20:26:08 in ghc a window takes 5 minutes to open 20:26:20 right, you mean SOE? 20:26:21 and in latest stable hugs release some dll is missing from the build 20:26:25 (its not so standard) 20:26:32 SOE as well as the HGL 20:26:36 SOE is just a wrapper 20:26:47 gtk2hs and wxHaskell are the standard graphics libs now days 20:26:57 --- join: aleko (i=1000@adsl-75-4-151-109.dsl.emhril.sbcglobal.net) joined #haskell 20:27:05 well, it may or may not be standard but when I go to haskell.org and click on "Standard libraries" 20:27:07 SoE is really really old and barely maintained, as you found 20:27:21 right. we do have an issue with making clear what is considered standard now 20:27:24 HGL is there 20:27:34 though just yesterday a page has started with 'recommendations' 20:27:38 I have a new implementation of SOE that works with Gtk2Hs-0.9.10 20:27:52 well, I understand that and don't really have a problem with it 20:27:55 * dcoutts tries to find where he put it 20:28:06 but this single issue *will* turn off 95% of people that try haskell 20:28:08 coffeemug: yeah, but its a general problem you identify 20:28:27 another issue is lack of a haskell-in-a-box 20:28:29 so to speak 20:28:34 right. they should know to use gtk2hs, but don't know that. how do we fix that then? short of hackage-cpan 20:28:37 Visual Haskell is excellent 20:28:44 but you can't do some trivial things in it 20:28:48 like evaluate expressions 20:29:02 visual haskell, again, is a rather new project, and window specific 20:29:09 so i'd jot that down as a windows issue 20:29:17 sure 20:29:18 more windows users need to step up and contribute patches 20:29:25 but windows has 90% market share :) 20:29:35 right, but not 90% of the developers unfortunately 20:29:41 they're more like 10% of the developers 20:29:51 plus visual haskell code is closed 20:30:22 I wonder what the hardcore windows hackers like ndm and eivuokko use? 20:30:30 ndm, eivuokko ping? 20:31:04 Visual Haskell + WinHugs == greatness 20:31:08 :) 20:31:43 its a pity that windows tool support, and the lack of windows developers, for some reason reflects on the language 20:31:55 also refactoring could be a killer feature but Visual Haskell doesn't support that either (I'm aware of the command line project) 20:31:56 but we're addressing that I think 20:32:17 does Microsoft fund haskell development? 20:32:30 eivuokko and ndm, in particular, are improving tool support on windows 20:32:46 does paying simons count as funding Haskell development? 20:32:46 they fund the cambridge research lab 20:32:46 if I were MS/Google/Sun I'd jump on the opportunity to fund such projects 20:32:51 where some haskell dev takes place 20:33:23 well, do Simon's primary duties involve working on Haskell? 20:33:39 doing research, and improving ghc, I'd say 20:33:48 then I guess it counts :) 20:34:10 another issue I found is that you can't really do any serious work without use of numerous extensions 20:34:18 there are at least two of them, you know... 20:34:19 many of which are supported only in GHC 20:34:25 it is a pity, that if you'd been running linux, you could turn on emacs and ghci, and away you'd go 20:34:34 coffeemug: right. that's being addressed too. Haskell' 20:34:45 but in practice, only ghc is used for serious development anyway 20:34:51 haskell mode is pretty nice. 20:34:52 dons: but ... but ... fundeps! 20:35:05 I've been using vim/kate of late, but haskell mode is tempting. 20:35:23 well 20:35:35 writing code for one compiler 20:35:35 coffeemug: so the extensions thing is a valid concern, and something actively being fixed 20:35:38 is kind of scary :) 20:35:44 ?where haskellexts 20:35:45 http://hackage.haskell.org/trac/haskell-prime/wiki/HaskellExtensions 20:35:51 for a list of what things support what other things 20:36:00 hmm 20:36:05 there were some other things I noticed 20:36:06 expect to see standardisation in the next 12 months though 20:36:06 ohh 20:36:46 latest wxHaskell binary for windows is compiled with like 6.2 verison of GHC 20:36:59 I'd have to double check 20:37:02 may be it's 6.4 :) 20:37:12 but certainly not a recent version 20:37:22 if its not, then that's another windows dev issue. 20:37:26 which is a yet another annoyance for a person who just wants to try out the language 20:37:37 not enough windows users distributing binaries 20:37:54 btw, please don't think that I'm "bashing" Haskell 20:37:56 I'm really not 20:38:04 no no, its fine. 20:38:10 I'm just giving a fresh impression that will hopefully help advance it 20:38:14 its very interesting seeing the language from this perspective 20:38:17 yeah 20:38:30 ie. .a cheap to install, working ghc+libs for windows sounds like a good idea 20:38:44 which provides gtk2hs, fps .... whatever 20:38:54 so people can try it out, get a gui clock demo written 20:39:01 mm 20:39:11 basically like lisp in a box 20:39:21 we need some work to make it easy to use Gtk+ on windows, or indeed wxHaskell 20:39:22 except lisp in a box uses emacs which is a turn off for most people 20:39:31 there are dll problems 20:39:45 possibly solvable dll problems 20:39:51 we'd need 3 or 4 windows developers, or access to windows boxes remotely (cough) 20:39:57 and then a list of tools that people expect 20:40:05 I got limited access to a Win2k3 box 20:40:13 non admin account makes things annoying 20:40:28 coffeemug: so what would you expect to have working in a haskell-in-a-box? 20:40:43 * dcoutts writes & publishes a cabal package in 5min flat 20:41:21 I'd think: stable ghc, some gui ide, gtk2hs/wxHaskell, haddock, happy, alex, ... ? 20:41:29 what else? 20:41:39 cabal-install 20:41:43 so you can get more 20:41:49 dons: a simple IDE where I can create projects, add files, and just hit "build" to create an exe, relatively easy indentation (this part of visual haskell sucks), highlighting errors as I type, some refactoring, working examples of GUI programs 20:41:54 a full cabal system, yep 20:42:24 and I should be able to download an installer, double click, and have all this stuff 20:42:30 coffeemug: so its mostly just a standard gui lib, and a nice IDE you're concerned about? 20:42:42 and one standard compiler that just installs and works 20:43:00 dons: well, I already set that up for myself, I just had to jump through many barriers to do it 20:43:05 yes 20:43:18 a la DrHaskell 20:43:22 yeah 20:43:28 right 20:43:56 think of Joel's article (don't have a link off the top of my head) where he said that every little annoyance people run into halves the number of users 20:44:20 so perhaps we can talk to ndm or eivuokko and find out what they think about preparing at a start, a haskell-on-windows page, making it easy to find things and get started with recommend tools 20:44:33 this is of course if the primary goal is to make Haskell a more mainstream language 20:44:44 which obviously may not necessarily be the case 20:45:10 well, for some reason, lack of easy windows installation turns into bad blog buzz against the haskell language itself. which is something that would be good to avoid 20:45:47 You can certainly clear some hurdles, but there are people who can't configure simple stuff on their own boxes right. It makes you wonder whether they'll ever hack in haskell. 20:45:49 its getting easier, but some concrete goals for windows support would perhaps help focus the efforts of the few windows people who are writing haskell tools 20:46:24 perhaps if haskell-in-a-box first installed darcs, and configued darcs send .. ;) 20:46:29 I gotta tell ya though, once I got through these minor issues I've been teleported to heaven :) 20:46:58 definetly going to write an article on creating a mini-lisp interpreter with haskell 20:47:09 --- quit: mpc () 20:47:32 where soe 20:47:35 @where soe 20:47:35 http://haskell.org/soe/ 20:47:38 @where soegtk 20:47:39 http://haskell.org/~duncan/soe/ 20:47:40 coffeemug: and perhaps make some advice about what to use on windows, so people pick the right things first time 20:47:51 @where+ soegtk http://haskell.org/~duncan/soegtk/ 20:47:52 Done. 20:47:59 yeah 20:48:08 of course after people get through this stuff 20:48:14 you'll probably get other crap 20:48:18 syntax is ugly 20:48:21 monads are hard 20:48:24 stuff like that 20:48:30 and if you want to try out dcoutts' new http://haskell.org/~duncan/soegtk/ :) 20:48:31 Title: Index of /~duncan/soegtk 20:48:31 but that's already in people's hands 20:48:35 so, due to popular demand! I present soegtk aka Graphics.SOE.Gtk 20:48:36 darcs get http://haskell.org/~duncan/soegtk/ 20:48:36 Title: Index of /~duncan/soegtk 20:48:47 dons beat me to it :- 20:49:01 ?karma+ dcoutts 20:49:01 dcoutts's karma raised to 20. 20:49:26 coffeemug: soe for gtk. cutting edge, might be worth playing with 20:49:42 yeah, I see that 20:49:51 dcoutts: got some demo graphics some where? 20:49:58 so what happened to hIDE 20:50:00 or hIDE2 20:50:06 or whatever it was supposed to be called? 20:50:28 stalled, awaiting some new developements in the underlying embedded haskell environment 20:50:48 actually 20:50:52 I had a question about haskell 20:51:01 how would one load modules "dynamically"? 20:51:03 dons, of SOE or Gtk2Hs/cairo ? 20:51:22 either. so coffeemug has an idea of what can be achieved in soe+gtk 20:51:32 coffeemug: you'd use hs-plugins, our dynamic linker library 20:51:36 ?where hs-plugins 20:51:37 http://www.cse.unsw.edu.au/~dons/hs-plugins/ 20:51:43 thanks 20:51:44 ?gooooooogle dynamic loading haskell 20:51:45 Unknown command, try @list 20:51:51 ?google dynamic loading haskell 20:51:55 http://portal.acm.org/citation.cfm?id=1088353&dl=ACM&coll=&CFID=15151515&CFTOKEN=6184618 20:51:55 Title: Haskell server pages through dynamic loading 20:51:56 let's see... 20:51:59 close 20:52:08 ?google dynamic loaded modules haskell 20:52:13 http://www.dtek.chalmers.se/~d00ram/dynamic/dynamiclinker.pdf 20:52:16 bah 20:52:33 http://haskell.org/~duncan/soe-demo/frakt-1-cairo.png 20:52:34 these chalmers guys own google, it seems ;) 20:52:53 ?google dynamic loading haskell dons 20:52:59 http://www.cse.unsw.edu.au/~dons/hs-plugins/paper/ 20:52:59 Title: Plugging Haskell In 20:53:00 Happy now? 20:53:02 :) 20:53:14 ?google dynamic loading haskell paper 20:53:16 http://www.cse.unsw.edu.au/~dons/hs-plugins/paper/ 20:53:16 Title: Plugging Haskell In 20:53:20 Also interesting. 20:53:38 is hs-plugins library as nice as lisp's (eval (read "(+ 1 2 3)")) paradigm? :) 20:53:54 it provides eval, yep 20:53:59 lambdabot uses it: 20:54:07 > (+) 1 2 20:54:17 helps if the network isn't slow 20:54:20 3 20:54:42 dons, coffeemug: there's this one: 20:54:44 http://haskell.org/~duncan/gtk2hs/SOE-cairo.png 20:54:59 it's just showing the difference in quality between the old and new implementations 20:55:06 it's not otherwise exciting 20:55:09 ah nice! 20:55:11 that's pretty cool 20:55:20 I was thinking more like minesweeper kind of stuff 20:55:23 that's SOE versus GTK+SOE? 20:55:34 something more "real world" 20:55:44 coffeemug: oh, have you seen Frag? 20:56:09 dons, yes. 20:56:17 --- join: Plareplane (n=Plarepla@142-165-43-211.sktn.hsdb.sasknet.sk.ca) joined #haskell 20:56:23 might be nice to play with , http://haskell.org/haskellwiki/Frag 20:56:24 Title: Frag - HaskellWiki 20:56:42 or one of the other games, http://haskell.org/haskellwiki/Libraries_and_tools/Games 20:56:43 Title: Libraries and tools/Games - HaskellWiki 20:57:02 a quick minesweeper would be a good tutorial too 20:57:06 yeah 20:57:11 all right guys 20:57:13 time to sleep 20:57:16 work tomorrow :( 20:57:20 back to Java I go 20:57:21 lol 20:57:42 thanks for everyone's help 20:57:54 looking forward to more blog entries :) 20:58:00 will do :) 20:58:02 good night 20:58:08 night! 20:58:08 --- quit: coffeemug ("Leaving.") 20:58:11 --- quit: eno ("[BX] Silly wabbit, BitchX is for kids!") 20:58:45 --- quit: ex__nor ("This computer has gone to sleep") 21:00:28 --- quit: Pupeno (Read error: 104 (Connection reset by peer)) 21:01:54 --- quit: Plareplane () 21:02:01 --- join: Plareplane (n=Plarepla@142-165-43-211.sktn.hsdb.sasknet.sk.ca) joined #haskell 21:02:58 Pseudonym: so the problem with using freetheorem as a plugin, is that it has to fit under the Plugin.* namespace, making later darcs pull's from your master repo trickier 21:03:13 --- join: Kahdloc (n=Crystals@cpe-24-24-102-214.midsouth.res.rr.com) joined #haskell 21:03:36 Right. 21:03:39 Fair enough. 21:03:42 --- quit: Plareplane (Client Quit) 21:03:51 --- join: Plareplane (n=Plarepla@142-165-43-211.sktn.hsdb.sasknet.sk.ca) joined #haskell 21:03:55 well, I'm doing it anyway 21:04:06 we'll see how hard it is in practice 21:04:16 You could make Plugin.FreeTheorem and re-import. 21:04:31 hmm 21:04:52 Plugin.FreeTheorem? 21:05:10 you'll see... almost done with the binding 21:05:14 OK 21:05:26 @google freetheorem 21:05:31 http://portal.acm.org/ft_gateway.cfm?id=224225&type=pdf&coll=&dl=ACM&CFID=15151515&CFTOKEN=6184618 21:05:34 hmm. 21:05:35 @google theorems for free 21:05:39 http://homepages.inf.ed.ac.uk/wadler/papers/free/free.ps 21:06:00 portal.acm.org is not a location that I would ordinarily associate with the word free 21:06:09 --- quit: fnordus (Read error: 60 (Operation timed out)) 21:06:29 heh 21:06:38 lets just say that link is magical 21:08:02 --- quit: Plareplane (Client Quit) 21:08:08 --- join: Plareplane (n=Plarepla@142-165-43-211.sktn.hsdb.sasknet.sk.ca) joined #haskell 21:09:43 why doesn't he use a readable type system? 21:09:54 Look at the year on the paper. 21:10:04 oh 21:10:12 It was written at a time when most FPLs used Miranda's type system, which is even LESS readable. 21:10:13 I wasn't three yet at the time 21:10:26 map :: (* -> **) -> [*] -> [**] 21:10:36 --- quit: shawn__ (Read error: 110 (Connection timed out)) 21:10:39 Wadler's is an improvement. 21:13:23 dons, I like your contest idea 21:13:58 @hwn add soegtk announcement 21:14:02 *** "ADD" wn "WordNet (r) 2.0" 21:14:02 ADD 21:14:02 n : a condition (mostly in boys) characterized by behavioral and 21:14:02 learning disorders [syn: {attention deficit disorder}, {attention 21:14:02 deficit hyperactivity disorder}, {ADHD}, {hyperkinetic 21:14:04 [35 @more lines] 21:14:08 hah 21:14:18 @help hwn 21:14:19 help . Ask for help for . Try 'list' for all commands 21:14:41 * dcoutts wonders what hwn is being auto-corrected to 21:14:49 WordNet 21:14:49 @help wn 21:14:50 I perform dictionary lookups via the following 13 commands: 21:14:50 @all-dicts .. Query all databases on dict.org 21:14:50 @devils ..... The Devil's Dictionary 21:14:50 @easton ..... Easton's 1897 Bible Dictionary 21:14:50 @elements ... Elements database 21:14:52 [9 @more lines] 21:15:03 probably that. 21:15:29 shouldn't @help use the autocorrection too? 21:15:46 you can't define fix in system F? 21:16:11 Nopr. 21:16:12 Nope. 21:16:33 Otherwise you can prove Russell's paradox. 21:17:02 so? 21:17:23 Russell gets upset. Twists in his grave. 21:17:30 heh 21:17:33 ?quit new free theorems plugin 21:17:34 --- quit: lambdabot ("new free theorems plugin") 21:18:08 --- join: lambdabot (n=lambdabo@manzano.cse.unsw.EDU.AU) joined #haskell 21:18:58 ?free id :: a -> a 21:19:10 now we play the freenode-waiting-game 21:19:15 Sorry, I did a @list behind the scenes. 21:19:23 no harm 21:19:35 It's not finished yet. 21:19:39 ah 21:19:41 harm 21:20:09 Almost done. In the t's now. 21:20:23 f_1 . id = id . f_1 21:20:24 should do that via DCC! 21:20:35 dons, so what bits of the paper should I be looking at while on the train? 21:20:40 ?free swap :: (a,b) -> (b,a) 21:20:41 ( f_1 ($proj_2_1 v1_7) = $proj_2_1 v2_8 21:20:41 && 21:20:41 f_4 ($proj_2_2 v1_7) = $proj_2_2 v2_8 21:20:41 ) 21:20:41 => 21:20:43 [4 @more lines] 21:20:46 @more 21:20:46 ( f_4 ($proj_2_1 (swap v1_7)) = $proj_2_1 (swap v2_8) 21:20:47 && 21:20:49 f_1 ($proj_2_2 (swap v1_7)) = $proj_2_2 (swap v2_8) 21:20:51 ) 21:21:13 dons, I presume we do still want a paragraph about the strictness/bottom-discarding issues? 21:21:22 dcoutts: yes, that bit 21:21:39 dons, I guess we wont talk about zipWith etc 21:21:42 Pseudonym: can we make it prettier? 21:21:50 dcoutts: yeah maybe not. 21:21:52 not sure 21:21:56 since we've not really done them 21:22:01 maybe further work 21:22:02 oh that too 21:22:08 we think we can 21:22:09 we've got lots in there anyway 21:22:12 heh 21:22:20 hey 21:22:20 further work is ok 21:22:23 Haskell is that old? 21:22:31 ? 21:22:36 did it not yet have the [] syntax in 89? 21:22:46 yeah, i think so. 21:23:13 you think it did or you think it didn't have the [] syntax? 21:23:22 Unfortunately, tuples aren't very elegant. 21:23:33 What you ideally want is f X g notation. 21:23:44 If you only have lists, it's much prettier: 21:23:51 ?free map :: (a -> b) -> [a] -> [b] 21:23:52 f_4 . v1_7 = v2_8 . f_1 21:23:52 => 21:23:52 $map f_4 . map v1_7 = map v2_8 . $map f_1 21:24:07 ?free return :: a -> M a 21:24:07 $map_M f_1 . return = return . f_1 21:24:36 @free (==) :: Eq a => a -> a -> Bool 21:24:37 Pattern match failure in do expression at Plugin/Free/FreeTheorem.hs:55:20-34 21:24:50 Can't handle typeclasses. 21:24:57 but you can do this: 21:25:03 ?free a -> a -> Bool 21:25:03 Expected OpColonColon 21:25:11 ?free equal :: a -> a -> Bool 21:25:11 equal v1_4 v1_6 = equal (f_1 v1_4) (f_1 v1_6) 21:25:16 And: 21:25:17 shouldn't it give a syntax error or something? 21:25:28 instead of saying " Pattern match failure in do expression at Plugin/Free/FreeTheorem.hs:55:20-34" 21:25:29 ?free sort :: (a -> a -> Bool) -> [a] -> [a] 21:25:30 v1_4 v1_6 v1_8 = v2_5 (f_1 v1_6) (f_1 v1_8) 21:25:30 => 21:25:30 $map f_1 . sort v1_4 = sort v2_5 . $map f_1 21:25:34 perhaps bettter alpha renaming would help? 21:25:37 Yes, probably should. 21:25:47 * dons finds a good freshname generator 21:25:54 By all means. 21:26:11 Incidentally, take a look at the theorem for sort. 21:26:25 -- Generate a fresh type variable 21:26:25 freshName :: TC Id 21:26:25 freshName = TC $ \s -> 21:26:25 let i = unique s 21:26:25 fresh = mkId $ if i < 26 then [chr (ord 'a' + i)] else 't' : show i 21:26:28 in (fresh, s {unique = i + 1}) 21:26:35 Basically it says if f doesn't change the comparison function, then map f commutes with sort. 21:26:43 hmm! 21:26:49 that's nice 21:26:51 ?free sortBy :: (a -> Ordering) -> [a] -> [a] 21:26:51 v1_4 v1_6 = v2_5 (f_1 v1_6) 21:26:52 => 21:26:52 $map f_1 . sortBy v1_4 = sortBy v2_5 . $map f_1 21:27:10 I think you meant a -> a -> Ordering 21:27:14 oh 21:27:19 ?free sortBy :: (a -> a -> Ordering) -> [a] -> [a] 21:27:19 v1_4 v1_6 v1_8 = v2_5 (f_1 v1_6) (f_1 v1_8) 21:27:20 => 21:27:20 $map f_1 . sortBy v1_4 = sortBy v2_5 . $map f_1 21:27:27 ?free pierce :: ((a -> b) -> a) -> a 21:27:27 ( f_4 . v1_9 = v2_10 . f_1 21:27:27 => 21:27:27 f_1 (v1_7 v1_9) = v2_8 v2_10 21:27:27 ) 21:27:27 => 21:27:29 f_1 (pierce v1_7) = pierce v2_8 21:27:33 Work that one out. 21:27:58 its amazing what it can come up with just from the types... 21:28:16 well, I mean, a human can come up with a lot of things based on types 21:28:25 ?free reverse :: [a] -> [a] 21:28:26 $map f_1 . reverse = reverse . $map f_1 21:28:27 but often that is based on guessing what the function might do 21:28:41 ?free fst :: (a,b) -> a 21:28:42 ( f_1 ($proj_2_1 v1_7) = $proj_2_1 v2_8 21:28:42 && 21:28:42 f_4 ($proj_2_2 v1_7) = $proj_2_2 v2_8 21:28:42 ) 21:28:42 => 21:28:44 f_1 (fst v1_7) = fst v2_8 21:28:52 hey how does it know what map is? 21:28:59 It doesn't. 21:29:02 It knows what $map is. 21:29:03 :-) 21:29:06 Which is the built-in map. 21:29:08 well, whatever 21:29:16 ?free map :: (a -> b) -> [a] -> [b] 21:29:17 f_4 . v1_7 = v2_8 . f_1 21:29:17 => 21:29:17 $map f_4 . map v1_7 = map v2_8 . $map f_1 21:29:41 what an... odd theorem... 21:29:46 Not really. 21:30:04 Basically: if f . g = h . k, then $map f . map g = map h . $map k 21:30:15 It's easier to read if you instantiate f = h and g = k. 21:30:23 But it's actually a slightly stronger theorem. 21:30:24 I guess it says that if you have two things with the type of map and if (f . g) = (h . i) then map1 f . map2 g = map2 h . map1 i? 21:30:26 --- join: shawn__ (n=shawn@adsl-70-132-17-209.dsl.snfc21.sbcglobal.net) joined #haskell 21:30:28 Right. 21:30:32 ?free undefined :: a 21:30:33 f_1 undefined = undefined 21:30:38 That's a nice theorem. 21:31:02 it looks like one of them workaholic theorems 21:31:07 Oh, and if it's not polymorphic, you can't tell anything: 21:31:11 ?free not :: Bool -> Bool 21:31:12 not = not 21:31:31 ?free a -> Bool 21:31:31 Expected OpColonColon 21:31:38 ?free p :: a -> Bool 21:31:38 p v1_4 = p (f_1 v1_4) 21:31:57 I should optimise that to p = p . f 21:31:58 definately need a better renamer 21:32:05 even GHC can do better than that. 21:32:06 p x = p (f x) 21:32:14 ghc user's the above fragment I posted 21:32:19 ?free void :: a -> () 21:32:19 grr. braino 21:32:19 void v1_4 = void (f_1 v1_4) 21:32:27 Same theorem. 21:32:31 yah 21:32:45 ?free coerce# :: a -> b 21:32:46 Expected OpColonColon 21:32:48 aww 21:32:51 ?free coerce :: a -> b 21:32:51 f_4 . coerce = coerce . f_1 21:33:01 oookay 21:33:02 That's a pretty cool theorem, too. 21:33:13 it isn't ... true, though! 21:33:21 Sure it is. 21:33:29 It makes more sense if you call it unsafeCoerce 21:33:31 well... not if coerce = unsafeCoerce# 21:33:46 f_4 and f_1 are totally unrelated 21:33:51 Correct. 21:33:58 And it's true for all f_4 and for all f_1. 21:34:06 I can assure you that that isn't what unsafeCoerce# does 21:34:31 I can assure you that it's true. The fact that it makes no sense just proves that unsafeCoerce# is impossible to express in Haskell. 21:34:39 hehe 21:34:54 ?free returnC :: a -> (forall r. (a -> r) -> r) 21:34:55 f_6 . v1_9 = v2_10 . f_1 21:34:55 => 21:34:55 f_6 (returnC v1_4 v1_9) = returnC (f_1 v1_4) v2_10 21:35:28 @free fix :: (a -> a) -> a 21:35:29 f_1 . v1_4 = v2_5 . f_1 21:35:29 => 21:35:29 f_1 (fix v1_4) = fix v2_5 21:36:06 ?free callcc :: ((a -> (forall r. (b -> r) -> r)) -> (forall r. (a -> r) -> r)) -> (forall r. (a -> r) -> r) 21:36:06 ( ( f_13 . v1_16 = v2_17 . f_4 21:36:07 => 21:36:07 f_13 (v1_9 v1_11 v1_16) = v2_10 (f_1 v1_11) v2_17 21:36:07 ) 21:36:07 => 21:36:08 [8 @more lines] 21:36:11 @more 21:36:11 f_20 . v1_23 = v2_24 . f_1 21:36:12 => 21:36:14 f_20 (v1_7 v1_9 v1_23) = v2_8 v2_10 v2_24 21:36:16 ) 21:36:18 => 21:36:21 [3 @more lines] 21:36:25 @more 21:36:26 f_27 . v1_30 = v2_31 . f_1 21:36:26 => 21:36:27 that is a very LOOOOONG theorem 21:36:28 f_27 (callcc v1_7 v1_30) = callcc v2_8 v2_31 21:36:33 Yes it is. 21:36:40 And it's a complicated type. 21:36:58 @free ByteString -> Char 21:36:59 Pattern match failure in do expression at Plugin/Free/FreeTheorem.hs:55:20-34 21:37:05 @free head :: ByteString -> Char 21:37:05 head = head 21:37:19 ?free head :: [a] -> a 21:37:19 f_1 . head = head . $map f_1 21:37:31 okay, so it doesn't care what the hell I say so long as it looks like a potential type? 21:37:38 Right. 21:37:50 @free bs :: BS a -> BS b c 21:37:51 free module failed: IRCRaised Plugin/Free/FreeTheorem.hs:(82,0)-(148,31): Non-exhaustive patterns in function freeTheorem' 21:38:06 needs better kind checking! 21:38:08 Can't handle type constructors with more than one argument. 21:38:14 oh 21:38:15 Unless it's a typle. 21:38:17 tuple 21:38:18 @free bs :: BS a -> BS 21:38:18 bs v1_4 = bs ($map_BS f_1 v1_4) 21:38:28 still needs kind checking! 21:38:37 There it assumes BS is a functor, and has a $map. 21:39:03 That, BTW, is a consequence of not having to declare types. 21:39:11 why does it assume that? 21:39:26 Because otherwise you can't assume anything about it. 21:39:33 hmm 21:39:48 If you assume it's a functor, then it has a nice mapping property that you can do something with. 21:39:56 My personal version also supports arrows for the same reason. 21:41:20 ?free null :: [a] -> Bool 21:41:20 null v1_4 = null ($map f_1 v1_4) 21:41:40 --- quit: erider ("I don't sleep because sleep is the cousin of death!") 21:41:55 ?free foldr :: (a -> b -> b) -> b -> [a] -> b 21:41:55 f_4 . v1_7 v1_9 = v2_8 (f_1 v1_9) . f_4 21:41:56 => 21:41:56 f_4 . foldr v1_7 v1_13 = foldr v2_8 (f_4 v1_13) . $map f_1 21:42:38 it *really* needs to rename the names again at the end... 21:42:43 Pseudonym: oh, you wrote your own haskell parser? 21:42:56 that means lambdabot now has 3 21:43:16 No, I wrote my own Haskell lexer. 21:43:19 It only parses types. 21:43:25 ha yes 21:43:27 And I wrote my own parser combinators. 21:43:29 heh 21:43:35 of course 21:43:36 why your own combinators? 21:43:38 * Pseudonym was bored on Sunday afternoon 21:43:42 :) 21:44:18 @free "hello" :: String 21:44:18 Pattern match failure in do expression at Plugin/Free/FreeTheorem.hs:55:20-34 21:44:22 hmm 21:44:30 * dons hacks the fresh name supply 21:44:30 It's usually easier for me to write a simple parser combinator library than to learn Parsec. 21:44:31 you really need to work on those parse errrors 21:44:35 dons: Please. 21:44:40 And send me a patch. :-) 21:44:49 dons: nono 21:44:49 yep 21:44:57 Feel free to modify the monad. 21:44:58 should make nice names *after* the theorem is made! 21:45:08 possibly 21:45:11 It optimises out a lot of intermediate names. 21:45:12 we'll see how it turns out 21:45:19 You should see these theorems _before_ they're optimised. 21:45:20 so that you don't waste nice names on things that go out of existance! 21:45:25 well then, a Map and a new fresh name, renamer would be good 21:45:37 i've got code for that somewhere 21:45:45 yeah, something like that 21:46:02 right, Pseudonym so after theoremSimplify? 21:46:16 Yeah. 21:46:30 also names like "f" should be used for functions and names like "x" should be used for variables... 21:46:42 i'll keep that in mind, SamB :) 21:46:53 SamB: I kind of do that. 21:46:57 Pseudonym: yeah 21:47:09 The thing is, here, id takes a "value": 21:47:12 but it only works about 75% of the time, or something... 21:47:14 ?free id :: a -> a 21:47:14 f_1 . id = id . f_1 21:47:19 but here, id takes a function: 21:47:26 ?free id :: (a -> b) -> (a -> b) 21:47:26 f_4 . v1_7 = v2_8 . f_1 21:47:26 => 21:47:26 f_4 . id v1_7 = id v2_8 . f_1 21:47:41 i noticed today that there is no list rotation function in the prelude or Data.List (cycle doesn't really count) 21:48:05 It's not smart enough to notice that the type of what is passed to id is a function. 21:48:17 But it uses f everywhere it knows it's a function because of the structure of the theorem. 21:48:45 > let rotate n xs = drop n xs ++ take n xs 21:48:46 Parse error 21:48:56 > let rotate n xs = drop n xs ++ take n xs in rotate 3 [1..10] 21:48:57 ?type rotate 21:48:57 [4,5,6,7,8,9,10,1,2,3] 21:48:59 forall a. (Bits a) => a -> Int -> a 21:49:08 i wrote rrotate and lrotate and created two instances of Enum and then it was pretty simple to have cyclical lists given my enumerations 21:49:09 ?type take 21:49:10 forall a. Int -> [a] -> [a] 21:49:20 ?free take :: Int -> [a] -> [a] 21:49:21 $map f_1 . take v2_5 = take v2_5 . $map f_1 21:49:26 Just checking. 21:49:50 a very good theorem 21:50:01 does GHC use this technique for optimization? 21:50:05 Yeah. The simpler the type, the nicer the theorem. 21:50:14 No, because the theorem is untrue in Haskell. 21:50:19 oh 21:50:24 The problem is that Haskell has seq. 21:50:26 SamB: that's a bit shorter than my implementation...for some reason i avoided the drop/take way of doing it i see that it has meric now 21:50:30 merit* 21:50:33 That screws wieth these theorems. 21:50:48 oh, seq is nasty indeed 21:51:07 or is it bottom that is nasty... 21:51:17 Believe it or not, bottom isn't so much of a problem. 21:51:37 ?google fast and loose reasoning is moral 21:51:40 http://www.cs.chalmers.se/~nad/publications/danielsson-popl2006-talk.pdf 21:51:58 SamB: oh, actually that implementation would fail if you rotate by an arbitrary distance 21:52:02 That's the one. 21:52:10 lispy: oh true... 21:52:37 best monad name ever: type MyMon a = StateT ... 21:52:41 so maybe ... 21:52:48 I warned you I was bored. 21:53:03 --- quit: aleko ("Leaving") 21:53:40 The free theorem for id is id . f = f . id, not id x = x 21:53:48 The reason is that the former is true if id _ = undefined 21:54:11 --- quit: LordBrain ("gtg") 21:55:18 ?free choose :: a -> a -> a 21:55:18 f_1 . choose v1_4 = choose (f_1 v1_4) . f_1 21:55:36 That would actually be more elegant if it wasn't curried. 21:55:37 > let rotate1 (x:xs) = xs ++ [x]; rotate 0 = id; rotate n = rotate1 . rotate (n-1) in rotate 13 [1..10] 21:55:38 [4,5,6,7,8,9,10,1,2,3] 21:55:44 f (choose x y) = choose (f x) (f y) 21:56:37 SamB: i that's close to my implementation...i don't have it in front of me but i seem to remember having 3 cases 21:56:48 lispy: yeah 21:57:01 rotate _ [], rotate 0 xs, and rotate n (x:xs) 21:57:15 what? no negative case? 21:57:28 not yet, my enums are positive :) 21:57:34 I admit that I forgot entirely about [] 21:58:05 but i have both rrotate and lrotate so agruably i could use a negative and skip one implementation, reducing my code size and hence my maintenance effort 22:00:55 * SamB needs to GOTO BED 22:01:18 BED: label not defined 22:01:28 damn, i forgot to make the BED 22:01:31 GOTO sadly doesn't have a free theorem. 22:01:40 SamB: you need to put the instruction COMEFROM COMPUTER onto your bed 22:01:48 heh 22:02:26 sure it does! GOTO FOO = insanity! 22:02:47 That theorem isn't free. It'll cost you dearly. 22:02:57 hah 22:03:41 instructions without free theorems considered harmful 22:05:27 --- join: jewel (n=jewel@59.144.66.27) joined #haskell 22:08:13 Pseudonym: are all variables bound with Forall? 22:08:31 ThForall 22:10:04 Yes. 22:10:08 But they're not pretty printed. 22:10:39 ok 22:10:49 Oh, the only ones that aren't are builtins (e.g. $map, (.)) and the function which actually has the theorem. 22:10:59 ok, i can live with that 22:11:03 i.e. nothing that has to be renamed. 22:11:06 yep 22:11:39 --- join: eno (n=eno@adsl-70-137-143-195.dsl.snfc21.sbcglobal.net) joined #haskell 22:13:06 --- quit: Itkovian () 22:15:31 --- quit: eno (Client Quit) 22:16:53 --- join: eno (n=eno@nslu2-linux/eno) joined #haskell 22:18:01 --- quit: shekmalhen ("Snakes on Crack!!") 22:36:35 --- join: lollan (n=lollan@cpc2-tref1-0-0-cust655.cdif.cable.ntl.com) joined #haskell 22:36:53 --- quit: lollan (Read error: 104 (Connection reset by peer)) 22:51:05 --- quit: vegai (Read error: 145 (Connection timed out)) 22:52:13 --- nick: eno -> eno-away 22:53:15 --- quit: kolmodin (Client Quit) 22:53:28 --- join: kolmodin (n=kolmodin@remote2.studat.chalmers.se) joined #haskell 22:58:31 k . a c = b (f c) . f 22:58:31 => 22:58:32 p . genSwap a d = genSwap b (f d) . f 22:59:27 --- quit: juhp (Remote closed the connection) 22:59:36 Nice. 23:03:26 --- join: gour (n=gour@lns02-1232.dsl.iskon.hr) joined #haskell 23:05:22 http://www.cse.unsw.edu.au/~dons/tmp/rename.patch 23:05:32 feel free to darcs apply 23:06:24 --- join: Eidolos (n=Sartak@c-24-128-121-242.hsd1.ma.comcast.net) joined #haskell 23:06:41 Thanks. 23:07:21 ?quit new renamer 23:07:22 --- quit: lambdabot ("new renamer") 23:07:55 --- join: lambdabot (n=lambdabo@manzano.cse.unsw.EDU.AU) joined #haskell 23:08:19 ?free id :: a -> a 23:08:25 Applied. 23:08:44 f . id = id . f 23:08:44 --- join: juhp (n=juhp@softbank219055112108.bbtec.net) joined #haskell 23:08:49 --- quit: juhp (Client Quit) 23:08:55 --- join: juhp (n=juhp@softbank219055112108.bbtec.net) joined #haskell 23:09:04 --- quit: juhp (Read error: 104 (Connection reset by peer)) 23:09:07 --- join: juhp_ (n=juhp@softbank219055112108.bbtec.net) joined #haskell 23:10:20 ?free pierce :: ((a -> b) -> a) -> a 23:10:21 ( f . f = f . f 23:10:21 => 23:10:21 f (f f) = f f 23:10:21 ) 23:10:23 => 23:10:26 f (pierce f) = pierce f 23:10:35 That doesn't look right for some reason. 23:10:55 ?free idPair :: (a,b) -> (a,b) 23:10:55 ( f ($proj_2_1 x) = $proj_2_1 y 23:10:55 && 23:10:55 f ($proj_2_2 x) = $proj_2_2 y 23:10:55 ) 23:10:55 => 23:10:57 [4 @more lines] 23:11:02 @more 23:11:02 ( f ($proj_2_1 (idPair x)) = $proj_2_1 (idPair y) 23:11:02 && 23:11:03 f ($proj_2_2 (idPair x)) = $proj_2_2 (idPair y) 23:11:05 ) 23:11:11 Apparently all functions are "f". 23:11:14 ah 23:11:41 --- join: johnnowak (n=johnnowa@207-38-204-65.c3-0.wsd-ubr2.qens-wsd.ny.cable.rcn.com) joined #haskell 23:12:12 --- quit: eyck (Read error: 60 (Operation timed out)) 23:12:20 yeah, old output for pierce: "( f_4 . v1_9 = v2_10 . f_1\n =>\n f_1 (v1_7 v1_9) = v2_8 v2_10\n)\n=>\nf_1 (pierce v1_7) = pierce v2_8" 23:13:30 ah, spotted it 23:13:37 2 chars off 23:14:19 ( g . p = q . f 23:14:20 => 23:14:20 f (h p) = k q 23:14:20 ) 23:14:20 => 23:14:22 f (pierce h) = pierce k 23:14:24 looks better 23:15:16 Yeah. 23:15:41 http://www.cse.unsw.edu.au/~dons/tmp/typo.patch 23:15:59 oh, not sure if that will apply. its partial 23:16:29 no, its fine. 23:21:12 ?quit fix some little wibbles 23:21:13 --- quit: lambdabot ("fix some little wibbles") 23:21:46 --- join: lambdabot (n=lambdabo@manzano.cse.unsw.EDU.AU) joined #haskell 23:22:31 ?free pierce :: ((a -> b) -> a) -> a 23:22:34 ( g . p = q . f => f (h p) = k q ) => f (pierce h) = pierce k 23:25:18 What did you do to the layout? 23:25:51 ?free callcc :: ((a -> (forall r. (b -> r) -> r)) -> (forall r. (a -> r) -> r)) -> (forall r. (a -> r) -> r) 23:25:51 ( ( f1 . f2 = f3 . g => f1 (p x f2) = q (f x) f3 ) => f4 . f5 = f6 . f => f4 (h p f5) = k q f6 ) => f7 . f8 = f9 . f => f7 (callcc h f8) = callcc k f9 23:26:41 --- quit: noclouds (Read error: 110 (Connection timed out)) 23:26:49 --- quit: gour (Remote closed the connection) 23:27:17 --- join: takuan (i=rtega@ip-213-49-149-171.dsl.scarlet.be) joined #haskell 23:27:30 --- join: gour (n=gour@lns02-1232.dsl.iskon.hr) joined #haskell 23:27:50 --- quit: mjk ("KVIrc 3.2.0 'Realia'") 23:28:14 --- join: noclouds (n=mhfan@60.166.33.99) joined #haskell 23:28:20 ?free [a] -> [a] 23:28:20 Pattern match failure in do expression at Plugin/Free/FreeTheorem.hs:57:20-34 23:28:28 ?free reverse :: [a] -> [a] 23:28:29 $map f . reverse = reverse . $map f 23:28:56 ?free concatMap :: (a -> [b]) -> [a] -> [b] 23:28:56 $map g . h = k . f => $map g . concatMap h = concatMap k . $map f 23:29:21 ?free filter :: (a -> Bool) -> [a] -> [a] 23:29:22 g x = h (f x) => $map f . filter g = filter h . $map f 23:29:37 ?free sort :: (a -> a -> Bool) -> [a] -> [a] 23:29:37 g x y = h (f x) (f y) => $map f . sort g = sort h . $map f 23:29:48 Very nice. 23:29:53 yeah, that's lovely 23:30:03 ?karma+ Pseudonym -- free theorems for all 23:30:04 Pseudonym's karma raised to 4. 23:30:13 It's the complicated ones like pierce that really need the layout, though. 23:30:27 yeah 23:30:32 ?free concat :: [[a]] -> [a] 23:30:32 $map f . concat = concat . $map ($map f) 23:30:58 ?free bind :: M a -> (a -> M b) -> M b 23:30:58 $map_M g . h = k . f => $map_M g (bind x h) = bind ($map_M f x) k 23:31:19 ?free (a -> b -> a) -> a -> [b] -> a 23:31:20 Pattern match failure in do expression at Plugin/Free/FreeTheorem.hs:57:20-34 23:31:27 ?free foldl :: (a -> b -> a) -> a -> [b] -> a 23:31:28 f . h x = k (f x) . g => f . foldl h y = foldl k (f y) . $map g 23:31:31 I'll fix up the error messages. 23:32:01 could the built in names by nicer? $map -> map 23:32:14 (fmap) 23:32:17 ?free map :: (a -> b) -> [a] -> [b] 23:32:17 g . h = k . f => $map g . map h = map k . $map f 23:32:26 That's the reason why I did that. 23:33:16 ?free scanl :: (a -> b -> a) -> a -> [b] -> [a] 23:33:16 f . h x = k (f x) . g => $map f . scanl h y = scanl k (f y) . $map g 23:33:35 ?free unfoldr :: (b -> Maybe (a, b)) -> b -> [a] 23:33:36 ( ( ( g ($proj_2_1 y) = $proj_2_1 z && f ($proj_2_2 y) = $proj_2_2 z ) => p y = z ) => $map_Maybe p (h x) = k (f x) ) => $map g . unfoldr h = unfoldr k . f 23:33:39 ooh 23:34:15 do any of these proj functions have nice names? 23:34:31 No. 23:34:42 It's $proj_arity_index 23:34:55 ?free idTriple :: (a,b,c) -> (a,b,c) 23:34:56 ( f ($proj_3_1 x) = $proj_3_1 y && g ($proj_3_2 x) = $proj_3_2 y && h ($proj_3_3 x) = $proj_3_3 y ) => ( f ($proj_3_1 (idTriple x)) = $proj_3_1 (idTriple y) && g ($proj_3_2 (idTriple x)) 23:34:56 = $proj_3_2 (idTriple y) && h ($proj_3_3 (idTriple x)) = $proj_3_3 (idTriple y) ) 23:35:13 that's peirce, not pierce, I believe :) 23:35:18 hmm, perhaps then, fst, snd, fst3, snd3, thd3 ? 23:35:34 for the common cases? 23:35:42 Probably a good idea. 23:35:49 ?free fst :: (a,b) -> a 23:35:49 ( f ($proj_2_1 x) = $proj_2_1 y && g ($proj_2_2 x) = $proj_2_2 y ) => f (fst x) = fst y 23:35:59 Maybe $fst, $snd, $thd etc 23:36:03 yeah 23:36:09 OK. 23:39:07 --- quit: hyrax42 () 23:39:19 --- join: hyrax42 (n=hyrax42@modemcable253.102-201-24.mc.videotron.ca) joined #haskell 23:41:08 --- quit: SamB (Read error: 110 (Connection timed out)) 23:41:42 Gotta go. 23:41:43 Night. 23:41:44 --- quit: Pseudonym ("using sirc version 2.211+ssfe") 23:42:41 --- join: Itkovian (n=Itkovian@dragnipur.elis.UGent.be) joined #haskell 23:44:03 --- join: boegel (n=boegel@konijn.elis.UGent.be) joined #haskell 23:49:29 --- quit: jargonjustin () 23:49:35 --- join: jargonjustin (n=jargonju@c-24-7-64-241.hsd1.ca.comcast.net) joined #haskell 23:55:18 --- join: d-bug (n=tommy@ua-83-227-204-254.cust.bredbandsbolaget.se) joined #haskell 23:57:31 ?free reverse :: [a] -> [a] 23:57:31 --- join: amiddelk (n=amiddelk@korma.labs.cs.uu.nl) joined #haskell 23:57:31 $map f . reverse = reverse . $map f 23:58:13 --- quit: therp ("Leaving") 23:59:59 --- log: ended haskell/06.08.22