00:00:00 --- log: started haskell/02.02.02 01:06:58 --- quit: lesner (Read error: 104 (Connection reset by peer)) 03:24:17 --- join: shapr (~user@p-c2fbab34.easy.inet.fi) joined #haskell 04:15:44 --- join: atun (~cogito@217-125-226-125.uc.nombres.ttd.es) joined #haskell 04:17:23 --- quit: atun (Read error: 104 (Connection reset by peer)) 05:26:30 well crap 05:26:36 that bites ass. 05:26:45 what now? 05:26:48 keep missing people? 05:26:51 as far as I can tell, there are no remaining copies of the HaskellWikiInHaskell *anywhere* 05:26:54 heh, no :) 05:26:55 sheesh, you complain a lot. ;) 05:26:59 * shapr grins 05:27:03 yah I probably do 05:27:42 what's up in your life yusri? 05:27:55 little 05:28:01 Going to waste some money today 05:28:10 I'm going to shool for a few weeks here 05:28:20 devoid of any IT applicances 05:28:25 * yusri shivers in fear 05:28:48 so I'm going to buy a PS2 today to waste my time while away, keep my mind of all the porgramming I'm missing 05:29:09 what kind of school is devoid of IT appliances? 05:29:44 Managerial/supervisory training 05:29:53 My laptop died :( 05:30:12 suckage 05:30:22 (the laptop death, not the school :) 05:30:30 It's one of those fairly general, conceptual, think-outside-the-box kind of classes 05:30:36 so the school too 05:30:47 Though it's necessary for my pay raise 05:31:35 what do you do for a living? 05:32:48 general linguistic translation 05:33:09 usually treaties and goverment/coorporation contracts 05:33:15 wow, that's hardwork 05:33:19 *very* hard work 05:33:29 very tedious, very exacting 05:33:44 I hope it pays very well 05:33:49 obviously wording and nuance are important :) 05:33:55 yah, really 05:34:13 It pays enough, I guess. Though I wouldn't complain if they doubled it ;) 05:34:23 heh 05:34:40 my significant other does translations of scientific documents sometimes 05:34:44 (among other things) 05:34:56 and I get to see just how difficult it really is 05:35:02 Ah- what lang? 05:35:41 she does german, french, english, and some dutch translations 05:35:54 and we're both learning finnish (though *very* slowly) 05:36:15 Ah- I know very little norwegian, which I suppose is fairly similar (?) 05:36:30 I don't think so 05:36:42 with the disclaimer that I am not a linguist :) 05:36:53 * yusri is; will ahev to look ;) 05:36:56 I think that most of the scanned in avian languages are closely related except for finnish 05:37:13 oh, shapr, I got ghc with hopengl to compile. No idea if it works, though :-) 05:37:13 norwegian, swedish, and danish sound pretty similar, 05:37:19 Heffalump: awesome! 05:37:28 only problem, it's nearly 200MB worth of debs 05:38:07 Ah, i recall- finnish is an oddity 05:38:14 yusri: those last three sound a lot like a strange dutch and german mixture 05:38:22 * yusri nods 05:38:42 one third dutch, one fifth german, one fifth english, a few french words, and some other random stuff.. 05:39:04 * yusri nods 05:39:19 languages like that make me yearn for my [relatively] pure arabic. 05:40:11 finnish is very pure in that respect 05:40:24 estonian is the closest thing to finnish, and it's not very close 05:40:33 * yusri looks at the time and realizes he needs to sleep 05:40:39 g'night yusri 05:40:48 sorry to cut you off- these ARE my favourite- but I need to crash 05:41:05 no worries :) 05:41:26 talk to ya tomorrow 05:42:26 prob just a nap- too much to do 05:42:50 heh 05:45:12 * xbill hacks the kernel. 05:45:25 * shapr hacks his locale 05:54:31 --- join: Yurik (~yrashk@gw.telcos.net.ua) joined #haskell 05:54:38 hi 05:54:44 shapr are you here? 05:55:39 guys, can anybody say where can I read any good tutorial on ASN.1 and BER/PER? 05:56:51 hi Yurik 05:56:55 are you serious? 05:57:00 why do you want to know about ASN.1? 05:57:09 it's most evil technology I've ever had to learn! 05:57:16 but, yes I can point you to lots of info on it 05:57:27 well, just read some introduction on it (in Erlang/OTP docs and some webpages) 05:57:32 I also know that erlang and Haskell have excellent ASN.1 tools 05:57:35 and found that it is quite interesting in E/AS 05:57:41 really? how so? 05:58:26 Using ASN.1 usage seems to be very nice in E/AS to support non-native method implementors to exchange data.. 05:58:40 I think *anything* would be better than ASN.1 05:58:52 ? 05:59:08 I've been working with ASN.1 for the last six months or so 05:59:24 I'm writing an X.509 PKI timestamp client in Java 05:59:28 rfc3161 05:59:46 and, in my humble opinion, ASN.1 is *evil* 05:59:58 I'd recommend XML far above it. 06:00:42 er, let me give some detailed examples: 06:00:56 there are about eight basic datatypes in ASN.1 06:01:12 but one type is called ANY 06:01:22 and it can be a any other ASN.1 datatype 06:01:48 but in 99% of the cases I've seen, it's actually an OCTET STRING (just a bunch of bytes) 06:02:15 still sounds ok, until you realize that most people embed another ASN.1 structure in there 06:02:27 so... 06:02:47 hmm. isn't ASN.1 widely used? 06:02:53 yes it is 06:03:04 and there's no central repository for ASN.1 definitions 06:03:14 nor for OID definitions 06:03:27 so even in framework of one project you propose to use XML? 06:03:31 and there are at least three different syntaxes (1988, 1991, 1994, and I think maybe a 1997) 06:03:42 I'd say "anything other than ASN.1" 06:03:48 heh 06:04:08 I could go into extreme detail about why I think ASN.1 is the most evil technology I've had to deal with... 06:04:11 do you want more detail? 06:04:32 yep, I want. I want to make a right decision 06:04:37 ok 06:04:49 just a moment, let me get some urls together 06:04:58 first, the layman's guide to a subset of ASN.1 06:05:24 http://www.rsasecurity.com/rsalabs/pkcs/ 06:05:39 near the bottom of that page, you'll see the layman's guide. 06:06:07 I see 06:06:34 I have an asn.1 response that's been sent back from a timestamp server, want me to send you the file? 06:06:35 * Yurik is downloading layman.ps.gz 06:06:47 http://www.cs.auckland.ac.nz/~pgut001/ 06:06:51 that's peter gutmann's homepage 06:07:00 he has a fascinating view of the X.509 standards 06:07:31 if you need to work with ASN.1 you *will* need his dumpasn1.c code 06:07:34 as well as his list of Object Identifiers 06:08:08 there are two books about ASN.1 that are available from ... oss.com I think... 06:08:11 and they're free 06:08:17 and I've read both of the books 06:08:22 and I've read the layman's guide 06:08:31 and I *still* have daily problem with encoding and decoding ASN.1 06:08:33 not only that... 06:08:47 but there around 30 different encodings for ASN.1 that I'm aware of 06:08:53 and at least three major encodings 06:08:59 those being BER, PER, and DER 06:09:15 --- quit: dennisb (carter.openprojects.net irc.openprojects.net) 06:09:25 there's even XER, the XML encoding, but that's used so that you can encode something, and the actually look at it in a text editor 06:09:40 "then actually" 06:09:45 well, seems that I understand why ASN.1 can be an evil technology.. 06:10:02 yes, especially because the standards don't cover everything themselves 06:10:10 some asn.1 parsers allow empty elements 06:10:16 --- join: dennisb (~dennis@as2-4-3.an.g.bonet.se) joined #haskell 06:10:16 some require a NULL in empty elements 06:10:27 some disallow both of those 06:11:09 you will need a piece of software to automatically compile your ASN.1 specification file into a chunk of code that can turn it into an ASN.1 representation 06:11:22 then, you'll need at least one encoder to encode that representation 06:11:40 I require two encoders/decoders at work, for DER and for BER 06:11:50 well, as I see, erlang has ASN compiler.. 06:12:12 oss.com sells their ASN.1 compiler for USD $25,000 06:12:19 it comes in C++ and Java flavors 06:13:02 Using ASN.1 usage seems to be very nice in E/AS to support non-native method implementors to exchange data.. 06:13:30 ASN.1 is not a good way to exchange data with another platform/language/host 06:13:35 that's my solid opinion 06:13:41 well, probably you're right :-) 06:14:01 so, what will be better? XML (I'm very pessimistic on wide XML usage) 06:14:03 I've spent three weeks straight trying to debug a very simple ASN.1 encoding problem 06:14:03 ? 06:14:22 one of the great strengths of XML is that I can read its contents even with Notepad 06:14:35 trying to debug ASN.1 is a complete and total nightmare 06:15:05 my overall opinion of cross-anything encoding is leaning towards lisp-style SEXPs lately 06:15:14 XML is second on my list 06:15:47 SEXP? what is this? 06:15:48 want me to explain why? 06:15:58 Lisp source code is most often written in Cambridge Polish notation: from a set of atomic symbols, you build Symbolic EXPressions (S-exp or SEXP -- once was SEX), a SEXP being either atomic, or a list of smaller SEXP, read and written as the parenthesized space-separated sequence of the representations of its components 06:16:10 that's a short quote from this page: http://tunes.org/Review/Languages.html 06:16:23 if you jump down to the LISP section, they have some interesting stuff 06:16:56 * shapr takes a moment to compose his thoughts on the subject of data interchange 06:18:52 written as the parenthesized space-separated 06:18:52 sequence of the representations of its components 06:18:52 that's a short quote from this page: 06:19:03 sorry, cut-n-paste 06:19:04 :-) 06:21:15 no worries 06:21:18 ok, I've been thinking about it 06:21:28 I read a funny quote somewher 06:21:47 it said "some has a problem, they need to match some text, they decide to use regular expressions... now they have two problems" 06:22:07 what it means to me is that regular expressions are powerful, but can easily bite you if you don't know what you're doing with them 06:22:32 that's why I'm the only person I work with who uses regular expressions, no one else understands them well enough to use them 06:23:07 with ASN.1, it can be useful, but it's so much more complex than regular expressions that it has fifty-nine ways to bite you for ever one way it could be useful 06:23:14 er, "every one" 06:25:17 heh :-) 06:25:38 so... 06:25:44 I'd say that ASN.1 isn't useless 06:26:09 I understand your point of view concerning ASN.1 :-) 06:26:11 but it's so complicated that you should write your own ASN.1 parser before you use it, because otherwise it will suck away your sanity. 06:27:09 if you still decide to use it, I'll help you howevery I can, but I would strongly recommend against using it. 06:28:31 probably I will not use ASN.1. I do not like such kinda techs... so complicated and can really make a kinda harm ( :)) )... 06:32:07 --- quit: shapr (Read error: 104 (Connection reset by peer)) 07:13:53 --- join: shapr (~user@p-c2fbab34.easy.inet.fi) joined #haskell 07:13:54 --- quit: Yurik (Read error: 104 (Connection reset by peer)) 07:54:17 --- join: tmoertel (~chatzilla@pa-mtlebanon2a-268.pit.adelphia.net) joined #haskell 07:54:47 hi tmoertel 07:54:50 what's up? 07:55:03 your Haskell, Perl, and XSLT article is nifty 07:55:08 howdy. just stoppin' by to see what's going on 07:55:26 thanks. hope it wasn't seen as overly harsh. 07:55:38 I liked it 07:55:47 I've given the url to a bunch of people to read 07:55:47 (I *like* XSLT, but its weaknesses drive me crazy.) 07:55:51 yah, I understand 07:56:34 I just figured out how to generate a ssh2 public key 07:56:38 now I gotta see if it works 07:57:09 tmoertel: written any cool code lately? 07:57:33 * tmoertel got a phone call . . . 08:04:32 * tmoertel is back 08:04:47 still there? 08:05:06 yah sure 08:05:07 what's up? 08:06:01 Let's see, Haskell-wise, I've been doing a few of John Hughes' courses online. 08:06:55 The "Designing and Using Combinators: The Essence of Functional Programming" course is wonderful. 08:07:12 I suspect it would still be a bit over my head... but maybe not... 08:07:16 His paper on Global Variables in Haskell is also a great read. 08:08:25 do you do much programming outside of Haskell? 08:08:36 I can guess you do since you deal with XSLT and Perl at least 08:08:59 Yes. Mostly Perl, C, C++, bash, SGML/XML-related. 08:09:23 Perl and Haskell are my favorites. 08:10:01 How 'bout yourself? 08:10:10 Python and Haskell are currently my favorites 08:10:22 but I'm having lots of fun with Joy lately 08:10:34 I do Java at one of my jobs also 08:10:38 I'm not familiar w/ Joy. What's it like? 08:10:53 it's a concatenative stack based functional lang 08:11:06 kind of like PostScript/Forth meets Haskell, and they have kids 08:11:06 Postfix? 08:11:09 yah, very 08:11:27 Is it used for embedded stuff, like Forth? 08:11:29 I didn't know postfix/stack languages existed before I found Joy, it's fun! 08:11:47 One of my favorites is the Unix 'dc' program! 08:11:50 heh 08:12:04 yah, the concatenative group talks about that occasionally 08:12:25 Can you give me a line or two of Joy code to give me a feel? 08:12:34 sure, just a moment 08:13:04 jewel and I are working on a connected graph path finder in Joy 08:13:14 DEFINE pairs == [["ward" "shae"] ["shae" "irene"] ["shae" "al"] ["al" "jewel"] ["irene" "lynda"] ["lynda" "jewel"]] . 08:13:19 DEFINE buildFilter == [] cons [first] swap concat [=] concat . 08:13:26 DEFINE collectEdges == pairs swap buildFilter filter . 08:13:49 Postfix-riffic! 08:13:54 totally 08:14:00 Stack-mazing! 08:14:10 absolutely! 08:14:21 it's great fun 08:14:30 Are you on the pragprog list? 08:14:33 sure! 08:14:52 Did you work on the circuit exercise from one of Prof. Hughes' lectures? 08:14:59 nope, not yet 08:15:31 I just did it last night. Very fun. 08:16:57 I keep getting distracted into doing fun stuff 08:17:04 well, other fun stuff :) 08:17:05 It happens. ;-) 08:17:09 I really enjoy using Haskell 08:17:22 I'd like to be able to recommend it to my bosses 08:17:35 Every time I do work in mainstream languages, I miss foldr. 08:17:44 Woe to me without foldr! 08:17:59 happily for me, Python has map, filter, and reduce (foldr) 08:18:07 that's what got me into FP 08:18:43 I realized how amazingly useful those commands are 08:19:07 Foldr doesn't really shine w/o lazy eval. 08:19:15 Then, it's a thing of beauty. 08:19:17 I have a feeling that the referential transparency requirement of FPLs ends up creating far more orthogonality in the languages 08:19:32 well, more than procedural languages 08:19:40 True, true. 08:19:56 yesterday I hypothesized that higher order functions in FP work like metaclasses in OOP 08:20:00 what do you think about that? 08:20:27 Interesting hypothesis. 08:20:59 btw, there's also the #loty channel here 08:21:12 I checked it last night, but it was dead. Active now? 08:21:23 not so much the last week or two 08:21:41 --- join: Yurik (~yrashk@gw.telcos.net.ua) joined #haskell 08:21:45 hi Yurik! 08:21:52 did you decide anything about ASN.1? 08:21:58 shapr hi 08:22:05 seems that decided not to use it :-) 08:22:09 * shapr cheers 08:22:22 hehe 08:22:29 tmoertel: hey, have you heard of the sf.net/projects/haskell-libs/ project? 08:22:46 I just checked it out last night. The idea is to collect snippets, right? 08:23:03 that's part of it 08:23:18 another part of it is to write up some of the standard libraries that are missing 08:23:26 such as smtplib, imaplib, poplib 08:23:53 I've got some lazy base64 and quoted-printable stuff I could contribute. 08:23:58 coool! 08:24:06 that would rock :) 08:24:18 * Yurik has downloaded USSR Anthem and got merry modd :o) 08:24:27 s/modd/mood/ 08:25:50 tmoertel: can you think of any haskell libs you'd use if they existed? 08:25:56 sounds from childhood.. yeah :-) 08:26:36 Yes: we need more robust XML support, easy HTTP (ala Perl's LWP::Simple), ... 08:27:19 modules for common text-processing shells... 08:27:22 hm, you think HaXML needs improving? 08:27:29 what kind of modules? 08:27:42 stuff like sort,uniq,tr,comm ? 08:27:54 I don't know perl, what does LWP::Simple do? 08:27:58 wget? 08:28:16 Yes. HaXML's support for % entities in DTD -> Haskell type leads to undesireble type duplication. 08:28:53 *Example* perl -MLWP::Simple -e'getprint("http://www.moertel.com/~thor/icfp2001/")' 08:29:10 I don't know anything about that, do you have a small snippet of code that shows the duplication of % entities? 08:29:46 sounds like the wget binary, urllib in python 08:29:58 or httplib 08:30:37 Many DTDs use % entities to define common classes of content: 08:30:47 08:31:07 And then those entities are referenced throughout the DTD: 08:31:17 08:31:49 08:32:16 But when HaXML constructs a type for Para and Intro, it will expand %inline into the Br Emph Strong Link Img like so: 08:32:39 Para_Br Para_Emph Para_Strong Para_Link Para_Img *and* 08:33:00 Intro_Br Intro_Emph Intro_Strong Intro_Link Intro_Img, and so on 08:33:02 hm 08:33:53 what would be better? 08:33:58 So you end up writing wacky handlers to get all the Br's, Emph's, ... 08:34:22 It would be better i f you could tell HaXML not to expand certain entities. 08:35:12 So you could create a "meta element" Inline that contained Inline_Br, Inline_emph, etc.and Para and Intro could each include Inline 08:35:30 rather than the expansion of Inline into all its components. 08:35:49 that makes sense to me 08:36:03 So, maybe we could do some work on HaXML, too. 08:37:16 sounds like it :) 08:37:42 since you said 'we' would you like for me to add you to the list of developers on haskell-libs ? 08:38:18 Sure. 08:38:25 ok 08:39:25 same name? tmoertel? 08:40:12 Yup. 08:45:17 I see that the current tasks are smtplib and imaplib. 08:47:46 welcome to the haskell-libs project! 08:48:04 oh, do you want to be an admin? 08:48:04 Yup. I can see that I'm on the list hoiw. Thanks. 08:48:38 No, that's okay. 08:48:45 yah, imaplib and smtplib were two projects that seemed needed 08:49:01 I actually think that poplib and smtplib would be best 08:49:29 or at least, most likely to be used by a lot of people 08:49:48 but I don't know the needs of the entire community by any means 08:50:06 ah, sandwiches are good things.... sometimes obsessive means I forget to eat 08:50:27 ahem, "obsessive coding" 08:50:29 whoops 08:50:34 So is espresso. Nothing cuts through "code fog" like it. 08:50:51 * shapr slurps on a cup of coffee 08:51:08 btw, what part of the world do you live in? 08:51:17 * tmoertel laments his empty espresso cup. 08:51:31 Glorious Pittsburgh. 08:51:33 You? 08:51:47 well, I'd email you some of my coffee, but I'm afraid what it might do to the computer 08:52:02 I'm in snowy Tornio, Finland 08:52:09 where sweden, finland, and the gulf of bothnia touch 08:52:29 I hear folks drink a lot of coffee in that part of the world. True? 08:52:46 er, I'd say more alcohol than coffee actually 08:53:03 tmoertel programmers drink a lot of coffee. in every part of the world :-) 08:53:04 Hmm.. Probably isn't so good for the code. ;-) 08:53:16 understandably so, the winters near the arctic circle get depressing 08:53:26 True. 08:53:32 I'm originally from Birmingham, Alabama, only been here ~2.5 years 08:53:50 * Yurik tried to avoid drinking alcohol a lot 08:53:51 Now, that's what I call a move! 08:53:54 * Yurik tries to avoid drinking alcohol a lot 08:54:45 yah, me too 08:54:48 I try to avoid it 08:55:41 * Yurik got a bad vodka-n-beer trip few days ago :-( 08:57:42 hm, any latin experts here? 08:58:11 If so, I'm not oen of them. 08:58:15 s/oen/one/ 08:58:18 heh :) 08:58:36 tmoertel: any suggestion for the haskell-libs group? 08:58:56 juhp suggested that I announce its existence on the haskell list and solicit lib suggestions and contributors there 08:59:20 That would be a good idea. 08:59:33 any other suggestions? 08:59:46 You might also want to ask about orphaned research projects. 08:59:53 * Heffalump tries to remember what happened to the Haskell libraries project that was discussed there 09:00:11 Heffalump: it turned into the haskell-libraries mailing list, which has very little traffic 09:00:20 at least, that's what I've seen 09:00:22 There's a lot of good stuff that started well but never was finished. 09:00:30 hmmm :/ 09:00:32 yah, I'd like to collect stuff like that 09:00:38 maybe the new FFI stuff would help 09:00:46 s/would/will/ 09:00:47 for example, I found a Hsh.hs, a minimal demo Haskell shell 09:01:11 and someone just finished writing an LDAP client in Haskell that might show up in the CVS tree if they approve 09:01:14 Someone here was doing that for his project. I wonder how he got on 09:01:25 Igloo: was doing what? 09:01:26 igloo: doing what? 09:01:29 Haskell shell 09:01:30 collecting stuff? 09:01:32 ah 09:01:53 "here" meaning your physical location? 09:01:55 or #haskell ? 09:02:03 and who, if the former? 09:02:08 * shapr pries proper out of Igloo 09:02:13 ahem, "proper nouns" 09:03:07 the problem with a Haskell shell is that dynamically loading Haskell scripts isn't actually possible 09:03:07 * shapr googles for haskell shell 09:03:13 http://www.informatik.uni-bonn.de/~ralf/software/examples/Hsh.html 09:03:16 Physically here, and Gareth 09:03:23 Gareth who? 09:03:31 nullity...ermmm... 09:03:35 ah, right. 09:03:42 It was hugs based I think 09:03:46 Heffalump: yah, dennisb and xbill helped me clean up Hsh.hs so that it works with ghc5 09:03:53 Gareth Smith 09:04:09 Oh, OK, I was never going to get that 09:04:25 shapr, ah, cool 09:04:55 Heffalump: yah, I'll be putting it in as the first snippet for haskell-libs 09:05:17 I'd really like to see a haskell shell that could load haskell scripts 09:05:28 even if has to recompile and restart itself :) 09:05:53 I guess if it was based around ghci, it'd be feasible 09:05:56 but that's rather big 09:06:05 better than nothing 09:06:32 --- join: ski (~md9slj@fraggel39.mdstud.chalmers.se) joined #haskell 09:06:35 hmm. 09:06:38 hi ski 09:06:43 hi ski! 09:06:45 hi Heffalump 09:06:47 hi shapr 09:06:58 w00, we got 17 people on at the same time 09:07:02 I think that's a record 09:07:28 how many are (at least a little) active of them ? (approx.) 09:07:35 aha 09:07:41 :) 09:08:18 hmm. What dynamic loading needs is essentially some kind of reflection module 09:08:55 Heffalump: that's something you wished for yesterday, right? 09:08:59 what would that involve? 09:09:51 * tmoertel is on the phone (again) . . . 09:10:07 tmoertel: tell me you have a nice comfy headset ;) 09:10:29 well, firstly a runtime library that could load up a haskell module (including parsing and type-checking) 09:10:48 that would be fun. 09:11:08 then, represent the types of the things that module exported in a Haskell data structure, and return those to the function that called it 09:11:41 and finally, provide a means for the functions in the newly loaded module to be actually called 09:12:08 that strikes me as the nastiest bit, conceptually 09:12:20 because if that module defines data types that are needed to call it 09:12:43 then you have to dynamically create them? 09:12:59 the function doing the calling needs to dynamically construct instances of that data type. So there'd need to be some kind of marshalling 09:13:06 well, instances of them, yes 09:13:20 Python has an interesting solution... there's a "new" module 09:13:36 which can turn an instance into any other instance, even one that doesn't exist 09:14:06 well, Haskell is strongly typed, so... 09:14:14 yah... 09:14:26 Python is strongly typed also 09:14:30 should one be able to load *any* module into the system with this ? 09:14:31 but dynamically strongly typed 09:14:59 errm, Python doesn't give types to higher-order functions, does it? 09:15:02 ski: I'd be happy with just enough to let me define new commands for a haskell shell myself 09:15:10 (i.e. even modules that one don't know the interface of yet ..) 09:15:12 ski: ideally, yes 09:15:18 Heffalump: huh? 09:15:22 oh 09:15:24 shapr: I could be wrong 09:15:35 no, functions don't require that a certain type show up in the args 09:15:44 you can pass in anything you want 09:15:52 ski: that's why I said that it'd need to represent the types of the functions exported by the module in some Haskell data structure 09:15:54 to bad .. 09:16:00 hmm 09:16:10 ski: you have a solution in mind that covers some modules? 09:16:37 but I guess a scheme that had a hard-coded interface would be an ok start 09:17:05 yah, anything at all would be a good start 09:17:41 shapr : well, one perhaps down-sized solution would be to dynamically load modules with known interfaces (like the signatures in ML, say). so you know what constants and functions to expect and their corresponding types so you just have to check that dynamically .. 09:17:54 Gareth Smith did some nifty stuff 09:18:29 shapr: he did? URL? 09:18:33 shapr : that way one have to know *what* is to be imported, but the actual implementation could be provided dynamically 09:18:43 Heffalump: http://www.comp.lancs.ac.uk/computing/research/cseg/projects/sol/ 09:18:51 fascinating, reminds me of Kansas from Self 09:19:01 and Nebraska is the Squeak version of that idea 09:19:03 that sounds like the wrong person 09:19:07 oh 09:19:07 shapr : though, sadly, this ain't as general as what we'd really like :( 09:19:16 since the person we were referring to is a third year undergraduate in Oxford :-) 09:19:20 ohhh 09:19:35 Heffalump: yah, probably is someone different then :) 09:19:41 ski: it's an excellent start 09:19:52 hmm. 09:19:57 hmm 09:20:01 hmm 09:20:04 hugs can be made into a dynamic library without too much hassle. 09:20:11 * shapr bows to peer pressure and hmmms some more 09:20:23 (I've linked it up to an IRC bot, for example) 09:20:27 whoa, cool 09:20:36 you have a haskell irc bot??? 09:20:39 perhaps one could have some special construct like : dynimport "Foo.hs" FooInterface in ... 09:21:05 shapr: errm, I never bound in the IO monad, so all the Haskell can do is evaluate things. 09:21:14 which isn't really much use 09:21:18 perhaps s/"Foo.hs" FooInterface/"Foo.hs" :: FooInterface/ or sumpthing. 09:21:40 * Heffalump would rather not add syntax to Haskell, that sounds like hard work 09:21:47 Heffalump: it's more haskell+irc integration than I've seen before 09:22:38 ski: sounds nifty 09:22:41 it wasn't very hard, but I seem to have lost it. 09:22:53 aw :( 09:22:59 that would be a cool snippet 09:22:59 oh, found it again. 09:23:07 yay! 09:23:31 it's only 100 lines of C and a Makefile 09:23:38 (as a module for eggdrop) 09:23:44 oh, and obviously the hugs sources 09:23:55 cool :) 09:24:29 sounds like something worth putting online 09:24:36 yeah, I guess 09:24:52 it seems to me, that to be able to use (e.g. call) entities from a dynamically imported module, one either have to be able to get a hold of their identifiers, somehow (e.g. with something like abovementioned construct) or to get all entities from the module in a tuple, say, returned from a function. do you agree ? 09:25:09 that haskell+irc things sounds interesting 09:25:46 ski: well, if the module had a previously defined interface, then the name of the interface functions would be defined too 09:26:09 Heffalump : yes, that's at least a start. 09:26:43 Heffalump : but the more general problem of an unknown module seems more difficult 09:26:46 and if it didn't, then using dynamic imports wouldn't help, since you wouldn't know the types or the names 09:27:19 ski: not hugely, the library doing the work could return a list of functions with their types 09:27:30 s/function/function name/ 09:27:41 then if it had a means to call them, say dynCall 09:27:44 you'd just do 09:27:50 dynCall "function" [args] 09:28:02 so what are we after here ? a sort of shell/read-eval-print-loop/toplevel that is able to do these things or do we wan't to do these things in any code in a program ? 09:28:12 dynCall would be type String -> [DynamicValue] -> DynamicValue 09:28:30 ideally the latter, though the former would be a good start :-) 09:28:31 ok 09:28:35 yah, I agree 09:28:56 * Heffalump wonders just how sick an idea it would be to interface to hugs using the FFI 09:29:05 uh? 09:29:12 um 09:29:21 the FFI allows calling external libraries 09:29:26 hugs is an external library 09:29:27 so... 09:29:32 ok, yes, that was it. 09:29:43 heh, cool :) 09:29:55 whose FFI ? hugs or irc or what ? 09:30:06 ski: Haskell (i.e. hugs, ghc, ...) 09:30:28 Heffalump : to call hugs from hugs/ghc ? hehe 09:30:43 you've been doing too much recursion ;) 09:30:47 :-) 09:30:51 I did say it would be sick. 09:31:03 entertaining as well 09:31:17 but actually if hugs was a dynamic library it wouldn't have too much overhead 09:31:30 though, i've sometimes used ! to escape to the shell and then restarted hugs from that shell .. :) 09:31:44 could well be 09:32:04 (not intentionally, i.e.) 09:32:51 but you never tried to call into the second hugs from code running in the first hugs :-) 09:32:57 * ski going for drink,brb 09:33:17 * shapr goes afk for a bit 09:33:27 actually, if you used System.system "runhugs ...", with read and show, you'd have an interface right away 09:33:31 heh! 09:34:15 but that's sick. 09:37:31 that's possible, though i didn't get any cursor in the recursively started hugs, nor any keyboard echo, IIRC. 10:01:18 * shapr returns 10:01:39 * ski returned some minutes ago 10:01:56 * tmoertel is off the phone 10:02:00 hi tmoertel! 10:02:09 * shapr considers rebooting emacs 10:02:26 hi tmoertel, i don't know you, do i ? 10:02:34 shapr : why ? 10:02:42 ski: I don't know, *do* you know me? ;-) 10:02:48 because ionwm and and emacs are fighting 10:02:56 * shapr introduces tmoertel 10:03:07 Howdy, ski! Nice to meet you. 10:03:16 this is Tom Moertel, whose recent credits include a popular article posted to kuro5shin.org 10:03:17 shapr : ionwm ? (window manager ?) 10:03:21 ski: yup 10:03:40 Nice to meet you too, tmoertel ! 10:03:58 Tom Moertel is also seen on the haskell mailing lists, and has recently been recruited into the haskell-libs project 10:04:03 * shapr gives the podium to tmoertel 10:04:27 oh, and let me introduce ski as well 10:05:01 ski has patiently answered all of my Haskell questions with detailed, thorough, and comprehensible answers 10:05:13 excellent. 10:05:16 * tmoertel gets phone again! 10:05:20 He's a resident of sweden, and has seen John Hughes giving lectures :) 10:05:37 that's about all I know of ski.. 10:05:58 ski: how would you introduce yourself? 10:06:09 * tmoertel is off the phone now (was the wife) 10:06:15 well 10:07:45 i think i could be described as a person much interested in programming languages. how they work, their differences, similarities, used concept, etc.. . My most favourite prog.lang. i think is haskell :) 10:08:09 And the language you like least? What would that me? 10:08:26 s/me/be/ 10:08:58 so i'm interested in computers, programming, hardware (though i don't know so much), and many diverse scientific (and not so scientific) things.. 10:09:07 hmm 10:10:27 well, it's kinda hard to think of a language one likes the least (cuz they have different strength and weaknesses), hmm. maybe the idiotic BASIC on my pocket calculator :-( 10:10:51 it has no strings !! *sniff* 10:12:53 ski, shapr: what your handle on K5? 10:13:40 tmoertel : well, i haven't been much on this kuro5hin.org, looking around for your article that shapr mentioned .. 10:14:30 tmoertel : you know what it's named ? (yes, of course you do ;) 10:14:54 It's the first one at http://www.kuro5hin.org/user/tmoertel/stories 10:15:32 thanks, lemme se what you have written then.. 10:16:38 Heffalump : are you gone ? 10:16:59 He is 10:17:08 Igloo : ok 10:21:59 ok, quite interesting article (though i don't know any XML or XSLT ..) 10:22:09 (only skimmed it) 10:22:24 re-reading it now, it comes off as more of a rant than I had intended 10:24:21 oh, why ? 10:24:52 I actually like XSLT, which makes its limitatations all the more annoying. 10:25:03 When reading the article, my fondness for XSLT fails to come thru. 10:25:15 oh, ok. 10:25:59 It's a good solution for 80% of 80% of the problems that it was designed to accommodate. 10:27:00 well, me don't know muchabout XML. so is XSLT a prog.lang (domain...) ? 10:27:01 It should have been good for 80% of 100% of the problems. 10:27:33 ahm.. 10:27:46 XSLT is a transformation language that maps one type of XML document into another document, often also XML. 10:28:15 but XML is a markup-lang, no ? (or is it prog.lang too ?) 10:28:23 It just so happens that XSLT templates are purely-functional programs (Turing complete). 10:28:29 XML is indeed a markup language. 10:28:50 that's what i thought i remembered. 10:28:57 XSLT is an XML "application," which effectively makes XSLT "programs" insanely verbose. 10:29:29 Much of XSLT templates are XML boilerplate, and having XSLT be XML makes it conveneint to mix in boilerplate. 10:29:41 But for the rest of the transformation process, this verbosity is haunting. 10:29:46 is it a way to treat a certain-style XML-doc. as a program (the transformer, i.e.) ? 10:30:02 ok 10:31:14 Take a look at http://www.kuro5hin.org/comments/2002/1/13/223854/606/8#8 10:31:47 ok, will do promptly. 10:32:06 That's what a simple Haskell foldl idiom looks like when expressed as XSLT. 10:33:58 You can make out what's going on, but the S/N ratio is vanishingly small. 10:34:17 i've not yet come to grips with it .. 10:35:04 this choose/otherwise is a conditional, yes ? 10:35:30 Yes. Effectively and if-then-else, in this use. 10:36:22 and call-template is sortof a call to a function in a variable, yes ? 10:36:53 call-template calls a named template (= function). 10:37:49 target is succesivly, the list elements .. ? 10:38:01 and input the base .. ? 10:38:28 Right. $subsitutions contains a list of target-replacement pairs that we iterate over via recursion and an index. 10:39:06 ok, now i get it. 10:39:51 but i don't think i could have easily written this even if i had a table of the apprpriate "functions" to use .. 10:40:06 very verbose :) 10:40:18 It's not to bad once you learn to see through the blinding verbosity. ;-) 10:40:36 But the lack of support for functional idioms is painful. 10:40:56 i can imagine .. 10:40:57 Especially since it's a system that enforces purely functional evaluation. 10:41:40 XSLT's predecessor was DSSSL, which was based upon a purely-functional variant of scheme. 10:42:15 ah,ok. 10:42:16 The programming part of DSSSL transformations was *much* better. But it's domain-specific support for SGML/XML was weak. 10:42:40 Many people thought that DSSSL required too much programming. 10:42:49 My guess is that XSLT was an overreaction to this criticism. 10:43:07 possibly 10:43:16 It provides a lot of built-in domain support but weak programming support. 10:43:26 Maybe XSLT 2.0 will achieve a better balance. 10:43:36 Until then, there's HaXML. ;-) 10:44:12 would it be a good idea to incorporate (more syntactically) some functional idioms into the language, for say mapping,folding and similar 10:44:40 Yes, that's what I want. 10:45:34 so that people scared of programming, so to speak, could use some special syntactic forms specialized for the domain (say like for in C), to make them more comfortable .. 10:46:07 instead of scary words like higer-order function application 10:46:12 It would also be nice if templates (=~ functions) were first-class types. 10:46:21 s/higer/higher/ 10:48:03 if it's gonna be purely functional, then it should have either at least some common idioms built-in or the ability to create them yourself (or better, provided in a more or less standard library). but perhaps then it is ging to look more programming-like .. 10:49:22 There's an EXSLT project that exists to correct many of XSLT 1.0's deficiencies using the library approach. 10:49:36 mmm 10:50:43 so, you've been at the haskell mailing-list alot ? (i haven't read there so much ..) 10:51:16 I haven't posted much. Mostly announcements re. GHC for Red Hat 6.2. 10:51:49 you're a developer/porter for GHC ? 10:52:25 I just build the packages for Red Hat Linux 6.2. 10:52:28 ahem, got distracted by a cute woman 10:52:34 It happens. ;-) 10:52:41 yes :) 10:52:46 * shapr reads the scrollback 10:52:48 :) 10:52:58 ok 10:54:43 * tmoertel must swap out a tape in the backup system . . . brb 10:58:56 * tmoertel is back, tape drive is happy. 11:03:08 * ski reading a little comp.lang.functional 11:04:54 I'm not a member of kuro5hin 11:05:01 I considered it, but it never happened 11:05:01 ok, simple question to clear the silence :). which do you prefer, type classes or parametrized modules ? 11:05:44 As in Haskell vs. ML? 11:05:45 well, i haven't been involved with it much (yet ?) so i ain't either. 11:05:53 yes, basically. 11:06:30 (one comp.lang.functional thread is named type class VS struct/functor) 11:06:57 oh,ok. 11:08:04 I think that parameterized modules would be a good addition to Haskell. 11:08:56 * tmoertel must depart to help wife unload car of groceries . . . 11:09:00 have fun! 11:09:00 i'm missing it. and perhaps and experimential additional feature could be explicit laws (in type classes or at top-level) 11:09:13 same ! 11:09:45 how would parameterized modules affect Haskell? 11:10:07 so we could state the functor and numeric and monad laws explicitely (and statically check them !) 11:10:52 hmm, well i guess in a similar way as the ML's, though one could perhaps have interesting interactions with type classes .. 11:14:15 * shapr doesn't know ML 11:14:23 ah, ok. 11:14:37 I'm still an FP newbie 11:15:09 well, in ML one can specify a module interface ("signature") independently of a module 11:16:37 so one can have one signature PriorityQueue, say. and some different modules providing implementations of these modules. ArrPriQueue : PriorityQueue,ListPriQueue : PriorityQueue, and so on, ok ? 11:17:46 the signature is (more or less) a list of names+types of function and values as well as types, that a module has to provide to match (implement) the signature. 11:18:36 a simple signature (in SML) might be 11:18:49 signature EQ = 11:18:52 sig 11:18:57 type t 11:19:08 val eq : t -> t -> bool 11:19:10 end; 11:19:33 this can more or less correspond to the Eq class in haskell, say 11:19:51 u with me so far ? 11:20:37 I think so 11:20:52 it sounds a lot like an interface in Java 11:21:01 ever more than type classes 11:21:08 it's a lot like it, i think. 11:21:33 now if we also have defined a SET signature say : 11:21:38 signature SET = 11:21:40 sig 11:21:44 type elt 11:21:49 type set 11:21:58 val empty : set 11:22:10 val add : elt -> set -> set 11:22:19 val mem : elt -> set -> bool 11:22:21 end; 11:23:01 now we can define a "functor" (parametriced module) taking a module of signature EQ as argument : 11:23:33 functor Set (Eq : EQ) : SET with type elt = Eq.t = 11:23:38 struct 11:23:45 type elt = Eq.t 11:23:52 type set = elt list 11:24:02 val empty = [] 11:24:16 fun add elt set = elt :: set 11:24:45 what's an elt? 11:24:54 fun mem elt [] = false 11:25:19 | mem elt (x::xs) = if Eq.eq x elt then true else mem elt xs 11:25:22 end; 11:25:31 elt is short for element 11:25:46 oh 11:26:17 so this is an implementation of a SET provided an implementation of an EQ is given as an argument. 11:26:36 thats an example of parametriced module, ok ? 11:26:44 that's wild 11:27:18 * shapr continues thinking about that 11:27:26 a whole module can take another module as an argument (with types and everything) !! one can make many nice things with this 11:28:15 it sounds like it'd be really useful for the strategy pattern 11:28:21 also, the good module system in ML's makes one think more about splitting a project into appropriate modules, instead of lumping all functions and types in a single file/module :( 11:28:26 and command pattern too 11:28:27 hmm 11:28:39 strategy pattern ? command pattern ? 11:28:51 from the DesignPatterns book 11:29:26 (BTW, this example was stolen from the usenet thread (and converted from O'Caml), cuz i know SML better) 11:29:47 heh, ok :) 11:30:23 i've not read that book, though iv'e heard of similar "pattern" (not knowing exactly what is meant) 11:30:47 maybe you could try to explain. 11:34:14 * shapr thinks 11:34:20 ok, well 11:34:23 the visitor pattern for example 11:34:26 no need to hurry 11:34:43 the way it works is that it walks a tree structure 11:34:46 ok, what is meant by a visitor pattern 11:34:55 ok, go on 11:35:00 it's a guy that operates on stuff in a tree 11:35:08 er, guy should probably be object :) 11:35:19 (or, function ?) 11:35:24 ERC>sure 11:35:25 oops 11:35:54 a visitor walks a tree of objects, and calls the 'visit' method on those object, and passes itself as an argument 11:36:47 each of those objects calls a method on the visitor, but they call "visit" + mytype 11:37:03 so if I'm a Foo, I'd call "visitFoo" on the visitor that was passed to me 11:37:43 so.... 11:38:01 so is it, sort of, a certain idiom for getting certain things done ? 11:38:03 a visitor encapsulates an algorithm that can be quickly swapped out for another algorithm 11:38:05 right 11:38:28 ok 11:38:38 if your algorithms change often, and your node types change rarely, a visitor is a very useful structure 11:38:57 though, i'm not sure why the visitor calls the Foo and then the Foo calls the visitor again ? 11:39:16 er, there's a really good reason, but I forget what it is 11:39:38 I think it's so you can write different logic to deal with different types of nodes 11:40:11 so it is sort of like what is encapsulated in map or foldr or foldl, right ? 11:40:20 right 11:40:27 ok 11:40:41 but it's more like a foldl that either does stuff, or recursively calls foldl 11:40:56 these strategy and command patterns, are they similar ? 11:41:02 ok 11:41:32 command pattern is where you have a 'command' superclass and the subclasses each encapsulate a command 11:41:50 hmm 11:42:15 commands as objects give you nice abilities such as emacs style hooks, ability to optimize before execution 11:42:17 that kind of stuff 11:42:39 strategy is where you have something, for example a sort object 11:42:48 and there are lots of ways to sort stuff 11:42:58 okay 11:43:18 so you have a strategy object that encapsulates a certain strategy instance, and you can swap strategies on your Sort class 11:43:52 DesignPatterns should really be called "programming idioms" or something 11:43:54 ok, sortof like Sorter.changeStrategy(fooStrategy) 11:44:00 right 11:44:12 Sorter.setStrategy(BubbleSort) 11:44:20 Sorter.setStrategy(QuickSort) 11:44:26 Sorter.setStrategy(BinarySort) 11:44:45 there a buncha these patterns 11:45:36 * shapr grabs the book off the shelf behind him 11:46:13 abstract factory, factory method, builder, prototype, singleton 11:46:23 so, what's the point of setting the strategy of the Sorter object. is it such that because this Sorter object probably is shared and referenced in lots of places in the program, and one wan't to transparently and quickly change all these occurances to use the new strategy (instead of having to construct new sorter objects and distrivute them some other way) 11:46:27 adapter, bridge, composite, decorator, facade, 11:46:59 s/distrivute/distribute/ 11:47:39 "strategy, define a family of algorithms, encapsulate each one, and make them interchangable. Strategy lets the algorithm vary independently from clients that use it 11:47:41 " 11:47:49 that's the two line summary 11:48:24 ah,ok. could be quite nifty for software engineering stuff, i presume. 11:48:32 yah, it is 11:48:52 it's interesting to notice how few of these have any place in haskell 11:49:43 hmm, well how do you mean ? 11:50:31 the needs and pressures are different 11:50:50 like, haskell isn't so much focussed with different software engineering stuff, but rather nifty ways to define special and general functions ? 11:50:55 a function is the main abstraction in Haskell 11:51:01 right 11:51:02 well, yes. 11:51:13 you make a general function, you make specific flavors of it 11:51:27 ok, with you. 11:51:44 what else is there? 11:52:24 abstractions, you mean ? 11:52:49 or nice facilities that help to structure and manage large pieces of code. 11:58:19 i guess that languages that have large mainstream use have evolved many things that isn't directly coding (i.e. getting things to work/done) but more managing and structuring facilities) 11:59:07 currently the most popular is objects 11:59:13 FPLs use functions 11:59:19 and now, some of them use modules 11:59:26 yes. 12:00:09 some larger quantity than subroutine/procedure/function is needed, at least, i think. 12:00:31 then be it objects or modules or both or perhaps something more exotic. 12:01:33 (generally speaking, not specifically for haskell (though IMHO the modules system needs improvement)) 12:06:19 what could be more exotic? 12:06:29 first class modules is an interesting idea 12:07:39 well, i don't know exactly. but i suppose some other could be invented. maybe this is what aspect (or related Adaptive) is soewhat about. 12:07:45 yes. 12:08:33 aspect oriented programming seems to be all about systematically pre/post/wrap hooking functions 12:08:48 adaptive I'm not sure about 12:09:16 urf, I'm getting tired, I think I'll go play tribes2 for awhile... 12:09:25 thanks for the information ski :) 12:09:31 ok 12:09:37 I'll think on modules and parameterization 12:09:41 it's a fascinating subject 12:09:42 staying here for the time being 12:09:53 I may be back soon, OpenGL in linux is being unhappy lately 12:09:55 * shapr waves 12:10:04 * ski waves back 12:10:06 --- quit: shapr ("tribes2") 14:14:27 --- join: karlmac (~karlmac@tango.peabody.jhu.edu) joined #haskell 14:14:27 --- quit: tmoertel (Read error: 104 (Connection reset by peer)) 14:15:15 --- quit: karlmac ("Client Exiting") 14:43:38 bye 14:43:54 --- quit: ski ("Leaving") 15:23:31 --- join: gene9 (dna@194.158.215.94) joined #haskell 15:24:39 gene9 hi 15:25:06 hi Yurik 15:26:18 * Yurik -> smoke 15:56:26 --- join: water (water@c207-202-221-160.sea1.cablespeed.com) joined #haskell 15:56:34 yo 16:23:37 --- quit: water ("ShadowIRC 1.1 PPC") 16:45:38 --- quit: jemfinch () 16:45:42 --- join: jemfinch (~jemfinch@rnie-99-43.resnet.ohio-state.edu) joined #haskell 16:45:55 --- quit: jemfinch (Read error: 104 (Connection reset by peer)) 16:45:56 --- join: jemfinch` (~jemfinch@rnie-99-43.resnet.ohio-state.edu) joined #haskell 17:05:36 --- quit: Yurik (Read error: 113 (No route to host)) 17:09:52 --- quit: pHa (Read error: 104 (Connection reset by peer)) 17:09:55 --- join: pHa (sjh@Sprint275.tbaytel.net) joined #haskell 17:27:20 --- quit: gene9 () 19:54:39 --- quit: dennisb (carter.openprojects.net irc.openprojects.net) 19:54:40 --- quit: Heffalump (carter.openprojects.net irc.openprojects.net) 19:54:40 --- quit: Igloo (carter.openprojects.net irc.openprojects.net) 19:54:44 --- quit: jewel (carter.openprojects.net irc.openprojects.net) 19:54:44 --- quit: pHa (carter.openprojects.net irc.openprojects.net) 19:54:44 --- quit: xbill (carter.openprojects.net irc.openprojects.net) 19:54:44 --- quit: yusri (carter.openprojects.net irc.openprojects.net) 19:54:45 --- quit: Logan (carter.openprojects.net irc.openprojects.net) 19:54:45 --- quit: smkl (carter.openprojects.net irc.openprojects.net) 19:55:05 --- join: Logan (~logan@up112.blacksburg.ntc-com.net) joined #haskell 19:55:05 --- join: yusri (~bruce@pcp415718pcs.martnz01.ga.comcast.net) joined #haskell 19:55:05 --- join: xbill (wli@DOMINIA.MIT.EDU) joined #haskell 19:55:05 --- join: pHa (sjh@Sprint275.tbaytel.net) joined #haskell 19:55:05 --- join: jewel (~jleuner@spamisevil.test.ie.vianw.net) joined #haskell 19:55:05 --- join: Igloo (~igloo@c93.keble.ox.ac.uk) joined #haskell 19:55:05 --- join: Heffalump (ganesh@munchkin.comlab.ox.ac.uk) joined #haskell 19:55:05 --- join: dennisb (~dennis@as2-4-3.an.g.bonet.se) joined #haskell 19:57:28 --- join: smkl (~sami@glubimox.yok.utu.fi) joined #haskell 23:59:59 --- log: ended haskell/02.02.02