--- Log opened Wed Feb 18 00:00:16 2009
00:16 < mightybyte> Man I love haskell+happs
00:18 < mightybyte> I just implemented a complete tagging system for my site in just a few hours.
00:18 < mightybyte> ...along with some simple automatic content tagging functionality.
00:19 < stepcut> mightybyte: :)
00:20 < mightybyte> It was definitely easier than I anticipated.  In retrospect, maybe I shouldn't have perceieved it to be as hard as I did.
00:20 < stepcut> :)
00:21 < mightybyte> Has anyone done the same thing in one of the imperative web frameworks?
00:22 < stepcut> mightybyte: never!
00:22 < mightybyte> I'd be curious to hear how long that typically takes.
01:12 < dsrogers> I just realized happs is ignoring all your headers...
01:13 < dsrogers> applyFilter is broken, basically
01:13 < dsrogers> it's no broken... it just doesn't do what you expect it might.
01:13 < dsrogers> runWebT was broken, though
01:14 < dsrogers> applyFilter only applies the filter of the return argument...
01:15 < dsrogers> because the filters are not all concatenated until you actually runWriterT
01:15 < dsrogers> I'm going to remove it.
01:15 < dsrogers> it's confusing and not actually useful.
01:16 < mae> dsrogers: can you write a unit test that fails for this?
01:16 < dsrogers> probably.
01:17 < mae> i would feel more comfortable if the core behavior had more unit tests, also will guard against regressions.
01:17 < mae> lots of activity today!
01:26 < mae> stepcut: whats happening! :)
01:28 < mae> so what is the purpose of
01:28 < mae> seeOther "/entries" (toResponse ())
01:28 < mae> why does it take a response?
01:28 < mae> seeOther is a redirect.
01:32 < dsrogers> I have no idea.
01:32 < mae> hm
01:32 < dsrogers> it's the way it was, you see...
01:33 < mae> well do you see any reason why it should take a response?
01:33 < mae> hehe
01:33 < dsrogers> I think a redirect can have a body.
01:33 < mae> I know it *can*
01:33 < dsrogers> which is useful if your client doesn't support redirects.
01:33 < mae> but when in practice is this ever useful
01:33 < mae> heh
01:33 < h_buildbot> Build for ghc-6.8.3 OK. Test suite ran. 15/69 test cases failed. Check http://buildbot.happstack.com/ for details.
01:34 < dsrogers> why can't I reference Paths_happstack_server from within SimpleHTTP?
01:34 < dsrogers> I get a link error if I try.
01:35 < dsrogers> how is that package included into the build?
01:36 < dsrogers> it appears to be missing...
01:40 < h_buildbot> Build for ghc-6.10.1 OK. Test suite ran. 15/69 test cases failed. Check http://buildbot.happstack.com/ for details.
01:40 < dsrogers> is it possible to inquire about an app's version?
01:46 < mae> dsrogers: you have to have it in other-modules area i think
01:47 < mae> for instance, in happstack i do
01:47 < mae> import System.Log.Logger (Priority(..), logM)
01:47 < mae> log = logM "Happstack.Server.HTTP.Listen"
01:47 < mae> disregard that
01:47 < mae> other-modules:       Paths_happstack
01:47 < mae> there
01:47 < mae> in that case, it would probably be
01:47 < mae> Paths_happstack-server
01:48 < dsrogers> Paths_happstack_server
01:48 < dsrogers> but ok.
01:48 < mae> and then there is a function called
01:48 < mae> getDataFileName
01:48 < mae> right yeah cause - is illegal as a module name right? :)
01:49 < dsrogers> I just want version...
01:49 < dsrogers> but thanks.
01:49 < dsrogers> I win!
01:49 < dsrogers> I now have an HTML error page if the monad calls "fail"
01:50 < mae> heh
01:50 < mae> neat.
01:50 < mae> cabal supposedly has darcs integration too
01:50 < mae> but i'm not sure how that works
01:50 < dsrogers> it even puts the error string in the page.
01:57 < h_buildbot> Build for ghc-6.8.3 OK. Test suite ran. 14/69 test cases failed. Check http://buildbot.happstack.com/ for details.
02:03 < h_buildbot> Build for ghc-6.10.1 OK. Test suite ran. 16/69 test cases failed. Check http://buildbot.happstack.com/ for details.
02:04 < mae> uh oh
02:04 < mae> gifs from the example app are getting served up as text/html
02:04 < mae> that wasn't happening before
02:04 < mae> lol
02:05 < mae> is this the whole thing about composeFilter being broken which you were referring to earlier? :)
02:18 < mae> : (
02:18 < dsrogers> yep
02:19 < dsrogers> I just sent a patch for it.
02:19 < dsrogers> apply apply apply!
02:19 < dsrogers> wait, is apply imdepotent?
02:20 < dsrogers> composeFilter works fine.  applyFilter didn't do what I thought it did, consequently runWebT was broken.
02:22 < dsrogers> mzero :: ServerPartT IO Response and fail "Hello World!" >> return "" will show off the new 500 and 404 pages.
02:22 < mae> btw
02:22 < mae> while your in there
02:22 < mae> as far as directory indexes go
02:23 < mae> thomas hartman already wrote something like this in happstack-helpers i think
02:23 < mae> then agian
02:23 < mae> its probably trivial
02:24 < mae> applied
02:25 < mae> mine says server happstack 0.9.2
02:26 < mae> so uh whats the function to get the server number?
02:27 < mae> the version number needs to be changed on line 256 of this file as well:
02:27 < mae> http://patch-tag.com/publicrepos/happstack/happstack-server/src/Happstack/Server/HTTP/Handler.hs
02:27 < mae> happsC           = P.pack "Happstack/0.9.2"
02:28 < mae> so however you put the version in the other place
02:28 < mae> it should be consistent here too :)
02:32 < h_buildbot> Build for ghc-6.8.3 OK. Test suite ran. 15/69 test cases failed. Check http://buildbot.happstack.com/ for details.
02:38 < h_buildbot> Build for ghc-6.10.1 OK. Test suite ran. 15/69 test cases failed. Check http://buildbot.happstack.com/ for details.
02:40 < dsrogers> yeah, the sample guestbook application works again.
02:41 < dsrogers> yeah
02:41 < dsrogers> it says that in the headers.
02:41 < dsrogers> but the error page should have the current version in the h1
02:42 < dsrogers> look at the bottom of simpleHTTP
02:42 < dsrogers> SimpleHTTP.hs
02:42 < dsrogers> that's where I build those strings
02:43 < dsrogers> I'll take a look at the other stuff later.
02:43 < dsrogers> I'm super tired.
02:44 < mae> Can you perform IO inside Ev?
02:44 < mae> kk
02:44 < mae> thanks daniel
02:44 < dsrogers> I have no idea.
02:44 < mae> good job
02:44 < dsrogers> :-)
02:44 < mae> no class MonadIO
02:44 < dsrogers> you're welcome
02:45 < dsrogers> that's the transaction one?
02:45 < mae> yeah
02:45 < dsrogers> doing IO there is bad.
02:45 < dsrogers> you have no idea how many times that block will be executed.
02:45 < mae> even if your just getting the time? :)
02:46 < dsrogers> yep.. the notion of when you're getting the time is not precise.
02:46 < dsrogers> it could be now, it could be tomorrow.
02:46 < dsrogers> impossible to tell when the fetch it does is going to matter.
02:46 < dsrogers> I understand that it probably doesn't matter...
02:47 < dsrogers> for time, anyway
02:47 < dsrogers> you would need to add it to the monad.  And have a time picked before the transaction starts.
02:47 < dsrogers> like what a DB does.
02:47 < mae> k
02:48 < mae> lets avoid that little nugget of joy for now
02:48 < dsrogers> lol
02:48 < mae> we're not building a database, after all
02:48 < mae> just persistent state
02:48 < mae> the more generalized we get, the more we just become yet another database
02:48 < dsrogers> ... it is just another DB.
02:48 < mae> heh :)
02:50 < dsrogers> goodnight!
03:33 < mae> ok pushed up some guestbook updates
03:35 < mae> more streamlined in appcontrol
03:43 < h_buildbot> Build for ghc-6.8.3 OK. Test suite ran. 15/69 test cases failed. Check http://buildbot.happstack.com/ for details.
03:49 < h_buildbot> Build for ghc-6.10.1 OK. Test suite ran. 15/69 test cases failed. Check http://buildbot.happstack.com/ for details.
07:37 < bezik> yo
10:52 < h_buildbot> Build for ghc-6.8.3 OK. Test suite ran. 14/69 test cases failed. Check http://buildbot.happstack.com/ for details.
10:59 < h_buildbot> Build for ghc-6.10.1 OK. Test suite ran. 15/69 test cases failed. Check http://buildbot.happstack.com/ for details.
11:16 < koeien> FYI: buildbot will now be upgraded to Debian 5.0. Short downtime might occur
11:24 < wchogg> Cool
12:10 < koeien> okay. huygens.functor.nl should be upgraded now
12:11 < koeien> h_buildbot: build
12:11 < h_buildbot> Build for all started. If one was running, no new one is started.
12:19 < h_buildbot> Build for ghc-6.8.3_STABLE OK. Test suite ran. 16/73 test cases failed. Check http://buildbot.happstack.com/ for details.
12:26 < h_buildbot> Build for ghc-6.10.1_STABLE OK. Test suite ran. 16/73 test cases failed. Check http://buildbot.happstack.com/ for details.
12:35 < h_buildbot> Build for ghc-6.8.3 OK. Test suite ran. 15/69 test cases failed. Check http://buildbot.happstack.com/ for details.
12:42 < h_buildbot> Build for ghc-6.10.1 OK. Test suite ran. 15/69 test cases failed. Check http://buildbot.happstack.com/ for details.
13:03 < h_buildbot> Build for ghc-6.8.3 OK. Test suite ran. 15/69 test cases failed. Check http://buildbot.happstack.com/ for details.
13:09 < h_buildbot> Build for ghc-6.10.1 OK. Test suite ran. 15/69 test cases failed. Check http://buildbot.happstack.com/ for details.
13:25 < koeien> good, the buildbot survived the upgrade to Lenny \o/
13:32 < stepcut> yay!
14:39 < wchogg> Okay, I'm a bit confused by something:  pairsToXml . xmlToPairs isn't the identity, e.g. on [Elem "foo" [Attr "bar" "baz"]]
14:39 < wchogg> I would have expected it to be equal to id, but maybe not.
15:02 < stepcut> yeah
15:08 < stepcut> I think it only works the other way around.
15:08 < stepcut> xmlToPairs . pairsToXml == id
15:09 < stepcut> pairsToXml . xmlToPairs /= id
15:10 < stepcut> really, xmlToPairs should fail on [Elem "foo" [Attr "bar" "baz"]] IMO
15:12 < wchogg> Honestly I've had a hard time parsing how the structure of Element should work.  Why is that an invalid Element?
15:13 < stepcut> wchogg: that is a perfectly valid Element, but it is just not suitable for use with xmlToPairs
15:14 < wchogg> Okay.
15:14 < wchogg> That makes me feel a bit better, otherwise I would have been more confused than I thought.
15:15 < stepcut> the intention is that you use pairsToXml to turn a list of key/value pairs into XML, and you can also transform that XML back into key value pairs
15:15 < stepcut> so xmlToPairs is only for transforming XML that is of the form that is generated by pairsToXml
15:15 < wchogg> Right, gotcha.
15:16 < gwern> this is why we need stronger types, so we can define PairedXML!
15:16 < stepcut> :)
15:17 < wchogg> Not enough of Happstack is defined in the type system!  We need dependent types!
15:37 < stepcut> wchogg: yep
16:06 < oshyshko> How do I get entire POST body? E.g.: [dir "print_post" [method GET $ ok . toResponse . ???]]
16:09 < oshyshko> ...my mistake. I meant: [dir "print_post" [method POST $ ok . toResponse . ???]]
16:11 < stepcut> oshyshko: something like, withRequest \rq -> rqBody rq
17:35 < cognominal> what is the meaning of the T in WebT and ServerPartT?
17:36 < stepcut> I am trying to migrate my app from happs to happstack, but the data is not migrating.I think it is because some of the module names are encoded in the checkpoint file, HAppS.Data.IxSet.IxSet Contact
17:36 < stepcut> cognominal: Transformer, as in Monad Transformer
17:36 < cognominal> thx
17:51 < dsrogers> stepcut: that's not good.
17:52 < stepcut> dsrogers: no
17:52 < dsrogers> need an export, module written for happs.
17:52 < stepcut> I think that happstack needs to provide migration instances for IxSet
17:52 < dsrogers> then an import module written in happstack.
17:52 < dsrogers> or that.
17:52 < stepcut> :)
17:52 < stepcut> I am testing that migration instance theory now
17:52 < dsrogers> I think I'm going to write a better http server.
17:52 < dsrogers> something more than the toy of simpleHTTP
17:52 < stepcut> dsrogers: hyena?
17:53 < dsrogers> hyena == simpleHTTP
17:53 < gwern> dsrogers: if you do, make it fast pls. gitit is still too slow for my taste
17:53 < dsrogers> only without ServerPartT
17:53 < dsrogers> gitit?
17:54 < dsrogers> is simpleHTTP slow?
17:54 < gwern> gitit! the most famous use of happs after hpaste and hackage!
17:54 < gwern> dsrogers: it's not so much slow, but it could be faster. transfering 100k on localhost should be faster than .1s
17:55 < stepcut> dsrogers: what's wrong with hyena?
17:55 < dsrogers> it doesn't have serverpartt
17:55 < dsrogers> and it doesn't have the functionality I want.
17:55 < stepcut> dsrogers: what functionality do you want?
17:55 < dsrogers> I want something more like tomcat for happstack.  dynamic recompilation, ssl/tls support, certification authentication, virtual hosting.
17:56 < dsrogers> is the slowness of gitit due to happstack?
17:57 < gwern> it's hard to say
17:57 < dsrogers> better protocol layer support.  mime types, compression, caching.
17:57 < gwern> we did a fair bit of work on gitit
17:57 < gwern> 's performance
17:58 < gwern> although the compression & caching situation is suboptimal. we're using expire headers when we could use max-age, and we're not gzipping either css or js
17:58 < gwern> forget which
17:58 < gwern> (at least we're gzipping the article body)
17:58 < dsrogers> mostly this will involve writing a few guards, making an hsplugin based recompiling module, and making something a little more robust than simpleHTTP
17:59 < gwern> hsplugin? perish the thought
17:59 < stepcut> dsrogers: hsplugins is dead, doesn't work with ghc 6.10
17:59 < dsrogers> ah
17:59 < gwern> better off with hint, perhaps.
17:59 < dsrogers> I didn't know that.
17:59 < gwern> hint's currently used in gitit for plugins; highly experimental tho
18:00 < dsrogers> well dynamic recompilation might not be an option then.
18:00 < stepcut> dsrogers: we worked out a plan for how to use hint so that you can do dynamic recompilation during development, but still be able to do static linking as well
18:00 < dsrogers> ok...
18:00 < stepcut> dsrogers: it's scheduled for 0.3
18:00 < dsrogers> ok
18:00 < stepcut> dsrogers: but you can implement it if you want :)
18:00 < gwern> stepcut: really? where's that discussed?
18:01 < stepcut> gwern: on this channel a few weeks ago
18:01 < dsrogers> I'm not so hot on the idea.  I think SSL and protocol handling is more important.
18:01 < dsrogers> but if I get to it, I get to it.
18:01 < stepcut> what do you mean by protocol handling?
18:01 < dsrogers> gzip compression, for example.
18:01 < dsrogers> I'm going to write that tonight.
18:01 < gwern> gzip compression made a big difference on large pages
18:02 < gwern> on my little novel, it cut page load time from ~3s to ~1s
18:02 < stepcut> dsrogers: is your http server going to be based around lazy IO ?
18:02 < gwern> which, incidentally, is one reason I think smpleHttp might not be as performant as possible
18:03 < Saizan> dsrogers: really, SimpleHTTP is just a frontend, protocol layers should be implemented indipendent of any frontend you use
18:03 < Saizan> dsrogers: and dynamic recompilation is simiraly indipendent
18:06 < stepcut> Saizan: agreed
18:07 < dsrogers> well that frontend needs support for openssl.
18:07 < dsrogers> pretty much everything else is a server part.
18:08 < stepcut> dsrogers: does it? At present we do SSL by using apache + proxy
18:08 < dsrogers> it's not hard to add, and it hides information about the client certificate.
18:08 < Saizan> i'd think you'd implement SSL in the backend, but i'm not an expert in the field
18:08 < dsrogers> so you can't use certificate authentication.
18:09 < dsrogers> I'm calling "simpleHTTP" the http server.
18:09 < dsrogers> not the module, the function.
18:10 < dsrogers> as in, using apache hides information about the client certificate.
18:10 < Saizan> aah, you're talking about .Server.HTTP.Listen
18:10 < dsrogers> yeah, probably.
18:11 < dsrogers> but some data is going to have to be passed up and down the stack.  openssl requires non-trivial configuration.
18:11 < Saizan> hyena is already better than that i think
18:14 < dsrogers> as, in you're suggesting I should use hyena as starting point?
18:15 < dsrogers> cause I could always right some glue to run a ServerPartT in hyena.
18:15 < dsrogers> and isn't one of you Jeremy shaw?
18:15 < stepcut> dsrogers: I have
18:15  * stepcut is jeremy shaw
18:15 < dsrogers> ah
18:15 < gwern> dsrogers: ignore stepcut, he's a notorious jokester
18:16 < dsrogers> is hyena faster than simpleHTTP?
18:16 < dsrogers> 'cause hyena still doesn't have openssl support.
18:16 < gwern> no idea. hack gitit to use both, benchmark'em and find out
18:16 < Saizan> you don't need to write the glue for ServerPartT to improve hyena :)
18:17 < stepcut> http://src.seereason.com/examples/happstack-hyena-tutorial/simpleHyena.hs
18:17 < dsrogers> ...
18:17 < dsrogers> I feel like my ideas are being lost in the noise here.
18:17 < Saizan> my point was that if your webserver ends up being coupled with ServerPartT or any other similar frontend you're probably designing it bad
18:18 < gwern> dsrogers: irc is not the place for substantive discussions
18:18 < stepcut> dsrogers: hyena is pretty fast, the author is aiming for 10,000 requests / second, on some unspecified hardware
18:18 < gwern> don't blame th medium for what happens to your message!
18:19 < Saizan> s/bad/badly/
18:20 < dsrogers> nono.  a bunch of the protocol handling stuff I want (like content-encoding, language support, gzip compression, caching headers, etc) can be done as ServerPArtT's
18:20 < stepcut> dsrogers: hyena is built around the Web Application Interface spec that is in the included Network.Wai. In theory, if simpleHTTP and hyena both used that interface, then things like ServerPartT might be independent of either one
18:20 < dsrogers> in addition to that, I need some features added to whatever web server I'm using.
18:23 < dsrogers> well you can just provide a Network.Wai.Application that runs a ServerPartT.
18:23 < dsrogers> it's probably a one-liner
18:23 < stepcut> no
18:23 < dsrogers> why is that?
18:23 < dsrogers> can I have a link to Network.Wai?
18:24 < gwern> no wai?
18:24 < dsrogers> exactly.
18:24 < stepcut> http://www.johantibell.com/cgi-bin/gitweb.cgi?p=hyena.git;a=blob;f=Network/Wai.hs;h=9323600268d7f134387595445999a9999cff7022;hb=HEAD
18:25 < gwern> no no, you were *supposed* to say 'yah wai'
18:25 < stepcut> The Wai stuff is mostly about getting all the frameworks to use the same data-types so they can interoperate
18:25 < stepcut> so Environment is similar to happstacks Request
18:28 < dsrogers> ah
18:30 < dsrogers> is it's not a one liner.  But at the very least you can convert an Environment to a Request then convert the Response to the needed tuple.
18:30 < dsrogers> then runWebT . serverPartT
18:30 < dsrogers> *runServerPartT
18:31 < dsrogers> that's the most backwards-compatible way of doing it.
18:32 < Saizan> don't you get problems with enumerators vs. lazy IO?
18:32 < dsrogers> I don't know.
18:32 < dsrogers> what's an enumerator in haskell?
18:33 < gwern> oleg's latest invention
18:33 < dsrogers> oleg?
18:33 < gwern> you must imagine him cackling as he writes up on the chalkboard the formula for left-fold enumerators
18:33 < gwern> @quote oleg
18:33 < gwern> ...what the hell, I know I added #happs to the lb rc
18:33 < gwern> well, go to #haskell and quote oleg, and you'll get an idea of the light in which he is held by the haskell community
18:36 < dsrogers> ok... regardless, the glue is not impossible.
18:38 < Saizan> you can convert forall a. (a -> S.ByteString -> IO (Either a a)) -> a -> IO a to ByteString with unsafePerformIO i guess
18:40 < dsrogers> ahhh.
18:40 < dsrogers> holy fuck that's bad.
18:43  * dcoutts wonders why it is in IO
18:44 < Saizan> to read the other chunks from the network
18:45 < Saizan> s/other/
18:46 < stepcut> apparently tibbe is changing up the enumerator stuff a whole bunch right now anyway for the next release, so some of that stuff will change
19:01 < dsrogers> way can't you pull it out once you're entirely read it out from the network?
19:03 < stepcut> pull what out ?
19:04 < dsrogers> the string you're reading with lazy-IO
19:04 < stepcut> the point of hyena is to not do lazy IO....
19:05 < stepcut> or, more specially, to be able to do stuff in 'constant' space and explicit control over closing resources when you are done with them
19:10 < stepcut> writing a migration instance for IxSet is hard
19:10 < Saizan> why?
19:12 < stepcut> I can't make the type checker happy
21:06 < mae> heh
21:06 < mae> alot of hyena controversy
21:06 < mae> dsrogers: what would you do differently from hyena/simpleHTTP if you wrote your own?
21:08 < mae> i mean, i think even the guy from turbinado implemented his own http server
21:08 < mae> what would be different?
21:09 < mae> stepcut: the point of enumerators is to be lazy with constant / predictable memory allocation/deallocation
21:09 < mae> hyena is still lazy AFAIK
21:14 < dsrogers> mae: I'm not going to write my own.
21:14 < dsrogers> just fix something that's out there.
21:14 < mae> dsrogers: ahh ok, can you clarify what you said earlier?
21:14 < mae> you mean "fixing" our http implementation?
21:15 < mightybyte> Anyone know how to fix the "overlapping instances" error I'm getting here http://hpaste.org/fatscgi/hpaste.fcgi/view?id=1535
21:18 < Saizan> 404
21:19 < mightybyte> Oops http://hpaste.org/fastcgi/hpaste.fcgi/view?id=1535
21:20 < Saizan> mightybyte: try removing ''Typeable from the list.
21:21 < mightybyte> Then I get "Overlapping instances for Data DistanceUnits"
21:21 < dsrogers> patch-tag is down
21:21 < Saizan> if it works file a bug about checking for duplicated classes in deriveAll
21:21 < mae> 1 minute
21:21 < Saizan> mightybyte: remove ''Data too
21:22 < Saizan> mightybyte: these classes are added by default, i think
21:22 < mightybyte> Oh, didn't realize that.
21:22 < mightybyte> Now I get "mkUsageInfo: internal name? DistanceUnits{tc a1fS}"
21:22 < mightybyte> And then "Ok, modules loaded: Distance." from ghci.
21:22 < Saizan> that's fine
21:22 < mightybyte> Ok
21:23 < mae> we are working on the patch-tag issue
21:31 < mae> should be fixed now
21:32 < dsrogers> I've just realized it's a bit bothersome to have only disjunctive guards.
21:32 < mae> sorry for the inconvenience
21:32 < mae> we are doing some updates to production right now
21:33 < dsrogers> as in, sometimes you want a part that will guard a list, and sometimes you want a part that will guard a do block.
21:35 < dsrogers> that's another API inconsistency.
21:35 < dsrogers> though I think the only "list" style guard we have is basicAuth
21:36 < dsrogers> oh... dir, path, etc.
21:36 < dsrogers> err, no, those aren't exactly the same...
21:38 < dsrogers> I'm going to think about this some more..
21:42 < mae> ok
21:43 < dsrogers> what's the best way to parse an http header in happstack?
21:44 < dsrogers> ah.
21:44 < dsrogers> we already depend on parsec
21:44 < dsrogers> I'll use that.
22:02 < wchogg> I just want to on record as saying that the implementation of IxSet is 50% bizarre & 50% badass.
22:02 < dsrogers> lol
22:03 < Saizan> heh
22:03 < Saizan> we should put some stress tests on it
22:04 < Saizan> *for
22:07 < wchogg> Probably.
22:08 < wchogg> IxSet is really cute, but I have no idea how well it really scales in practice.
22:08 < dsrogers> why does Text.ParserCombinator.Parsec look nothing like the documentation it links too?
22:08 < wchogg> I think March is going to be the month of Performance.
22:11 < dsrogers> ohic.
22:11 < dsrogers> the documentation generated by haddock is just completely useless.
22:12 < wchogg> haddock fail
22:15 < dsrogers> are their builtins for parsing a float?
22:19 < wchogg> In Parsec?  I'm not aware of one.
22:22 < dsrogers> I broke loading of happstack-server in ghci.
22:23 < dsrogers> because Paths_happstack_server is not in the src/ patch.
22:23 < dsrogers> *path
22:23 < dsrogers> and otherwise it's hidden.
22:24 < dsrogers> I fixed it with a -i, though that's very annoying
22:28 < dsrogers> wow, parsec is about 1e6 times easier than I thought it would be.
22:29 < wchogg> Man, 6 orders of magnitude?
22:39 < dsrogers> well the last time I wrote a parse for anything it was javacc.
22:39 < dsrogers> whichi is a lot more heavyweight.
22:39 < wchogg> Fair enough.
22:40 < wchogg> In many ways I cut my teeth on Haskell.  I'm a bit spoiled in terms of the convenience it provides.
22:40 < dsrogers> I cut my teeth on apple basic.
22:40 < dsrogers> and then C
22:41 < dsrogers> and then C++, perl, shell and java.
22:42 < dsrogers> haskell is the nicest so far
22:42 < wchogg> You've probably been programming a good bit longer than I have.
22:42 < dsrogers> 12 or 13 years.
22:43 < wchogg> Hrmm...yeah about a factor of 4 longer.
22:43 < dsrogers> lol
22:43 < dsrogers> I work with people that worked with punch cards.
22:43 < wchogg> I'm just a humble mathematician that was intrigued by a language that used familiar words such as Functor
22:44 < dsrogers> lol
22:44 < dsrogers> inoright.
22:44 < dsrogers> I was physics/math in collage.
22:44 < dsrogers> that's one of my favorte parts of haskell too
22:45 < wchogg> Yeah, I actually used to work in particle physics in grad school.  I learned just enough C++ to do debug our simulation software, but didn't really write much until I learned Haskell.
22:45 < wchogg> I tried to argue back then that Haskell would have been 6 kinds of awesome for computational physics, but I lost that fight.
22:46 < dsrogers> oh collage.  I forgot about fortran.  can't work in physics without knowing fortran
22:47 < dsrogers> I didn't know about haskell back then.
22:47 < dsrogers> and it's hard to say to physics people "go learn another programming language"
22:48 < wchogg> I disagree!  It's easy to say!  It's hard to get anyone to care. :p
22:48 < dsrogers> they barely know the 6 or 7 fields they need broad knowledge in already
22:49 < dsrogers> I never went to grad school.  But I was going partical physics research as an undergrad.  in C++ and fortran...
22:49 < wchogg> Although as I like to mention, the simulation software I used to help maintain used template meta-programming in C++ to implement an ad-hoc lazy evaluation mechanism.
22:49 < wchogg> Hence I think Haskell might have been easier at the end of the day.
22:50 < wchogg> dsrogers : Yeah, C++ & Fortran are still the twin tongues.
22:50 < dsrogers> when were you doing grad school?
22:50 < wchogg> Just 3 years ago
22:50 < wchogg> Well, like 2.5
22:52 < dsrogers> you might be older than me then :-P
22:52 < wchogg> I didn't have my own computer until I was 19 or 20.
22:53 < wchogg> I didn't trust anything I couldn't do on pencil & paper.
22:53 < dsrogers> lol
22:53 < wchogg> ...yeah, that's weird isn't it?
22:53 < dsrogers> naw...
22:53 < dsrogers> I keep a slide rule on my desk at work.
22:53 < dsrogers> just in case.
22:54 < wchogg> I just wish I had someone tell me that CS was just applied abstract algebra years ago.
22:54 < gwern> what did you think it was applied of then?
22:55 < wchogg> I'm not sure if I understand the question.  What I thought the theoretical basis was?
22:56 < gwern> yes
22:58 < wchogg> I had no idea.  I had no exposure to programming or computer science till I started teaching myself just a few years ago.
22:59 < dsrogers> I learned math way after I learned CS.  It was easier to find people that knew CS than it was to find people that knew math.
22:59 < dsrogers> err.  knew math in high school
23:01 < wchogg> Heh...I didn't really know people who knew either.
23:03 < wchogg> But I bought lots of old dover books for cheap on math & read those during high school, supplemented by some Springer books as presents from family.
23:03 < dsrogers> nice
23:07 < gwern> these days are an embarassment of riches for geeky people
23:07 < gwern> just on my hard drive I have knocking around road to reality, sicp - video lectures and book, and sicm, and gigs of textbooks
23:08 < dsrogers> you can get sicp for free now?
23:08 < wchogg> Oh hell yeah.
23:08 < dsrogers> legally?
23:08 < wchogg> Yes.
23:08 < dsrogers> wow.
23:08 < wchogg> Unless they took it down a couple of months ago, yes.
23:08 < gwern> no sicm videos tho
23:09  * dsrogers pats his trusty copy of sicp
23:09 < gwern> I've only read through some of structure & interpretation of classical mechanics, but it looks like a very good thing to do after sicp
23:14 < wchogg> I thought it seemed a little odd,honestly, but that's probably just because of how different it felt from how I learned it.
23:28 < h_buildbot> Build for ghc-6.8.3 OK. Test suite ran. 15/69 test cases failed. Check http://buildbot.happstack.com/ for details.
23:35 < h_buildbot> Build for ghc-6.10.1 OK. Test suite ran. 16/69 test cases failed. Check http://buildbot.happstack.com/ for details.
23:37 < mae> wow 30 patches! :P
23:37 < mae> oh duh this repo is stale
23:55 < wchogg> mae : I didn't quite get all of the doc stuff I wanted done tonight, but at least ixset is totally done & data is mostly done.
--- Log closed Thu Feb 19 00:00:17 2009