--- Log opened Sun Feb 15 00:00:14 2009
00:05 < stepcut> :)
00:12 < stepcut> my style's like a chemical spill
02:20 < mae__> hmm
02:20 < mae__> i wanna see the patch like a bad rash
02:23 < mae__> i wrote a haiku
02:24 < mae__> in the guestbook
12:01 < gwern> '    Couldn't match expected type `HAppS.Server.SimpleHTTP.WebT
12:01 < gwern>                                     IO Inline'
12:01 < gwern>            against inferred type `IO Inline'
12:01 < gwern>     In the first argument of `processWithM', namely `convertWikiSign'
12:01 < gwern>     In the expression: processWithM convertWikiSign b
12:01 < gwern>     In the definition of `dateSigTransform':
12:01 < gwern>         dateSigTransform _ b = processWithM convertWikiSign b'
12:01 < gwern> bleh
12:01 < koeien> liftIO?
12:03 < gwern> quite
12:06 < gwern> excellent. now basic dateness is happening '--gwern @date@' becomes '--gwern Sun Feb 15 17:06:08 UTC 2009'
12:06 < gwern> ack! it's not being converted in the source!
12:17 < gwern> @hoogle escape
12:18 < mae__> morning
12:18  * gwern is working on gitit plugins
12:18 < mae__> neat
12:18 < gwern> right now I am working on interwiki links
12:19 < gwern> so instead of writing '[Emperor Palpatine](http://starwars.wikia.com/wiki/Emperor_Palpatine)', one could write '[Emperor Palpatine](Wookieepedia:Emperor Palpatine)'
12:26 < dsrogers> mae: I have a patch very nearly ready.  It has some surprising (for me) results.  You can now construct your entire response as a do block in ServerPartT, since I lifted all the type classes from WebT.
12:26 < dsrogers> you don't even have to know about WebT
12:27 < dsrogers> so after I get this patch polished off, I'm going to rewrite the methods in SimpleHTTP to do exactly that.
12:27 < dsrogers> partially as a demonstration.
12:27 < dsrogers> It should allow people to trim down their code quite a bit.
12:45 < mae__> ok
12:45 < mae__> sounds nice
12:46 < gwern> frustrating. my interwiki plugin works beautifully in ghci
12:46 < gwern> but not in gitit
12:46  * gwern punts to john
13:19 < mae__> hehe
13:20 < stepcut> greetings and salutations
13:21 < mae__> greetings earthling
14:17 < mae__> stepcut: guestbook? :)
14:25 < stepcut> mae__: what about it ?
14:28 < mae__> stepcut: jus wondering if you got around to sending the patch yet
14:28 < stepcut> working on it now
14:28 < mae__> neat
14:33 < stepcut> does ghc 6.8 support standalone deriving ?
14:37 < stepcut> heh, I thought my code had a semi-colon instead of a comma, but it was just a speak of dirt on the screen :)
14:47 < stepcut> the parseConfig stuff in SimpleHTTP is almost useless
14:49 < mae__> ; )
14:50 < stepcut> if it took additional [OptDescr (Conf -> Conf)], and returned, Either [String] (Conf -> Conf), then it would suck-less
14:55 < Saizan_> i'm not sure why it's there at all
14:57 < stepcut> it's been there a long time
14:57 < stepcut> happs experimented with a lot of different ways of trying to make your main function lightweight, I think it is left over from that
14:59 < stepcut> it's also more annoying than necessary to change where fileSaver stores its goods
15:00 < stepcut> actually, it's not that annoying, just not obvious
15:08 < mae__> heh
15:09 < mae__> i am looking at the videos from the socalfp talk
15:09 < mae__> they are not all up yet
15:09 < mae__> but i will post the slides + videos in a couple days or so
15:09 < mae__> here are the first two if anyone is interested:
15:09 < mae__> http://www.youtube.com/user/patchtag1
15:22  * stepcut is kitchen-sinking it up
15:23 < mae__> lol
15:23 < stepcut> I added a bunch of instances for ClockTime so you can serialize it
15:24 < mae__> cool
15:24 < stepcut> unfortunately, the stuff in Data.Time is nearly impossible to add instances for
15:25 < mae__> oh ?
15:25 < stepcut> yeah, the constructors for E12 in the Data.Fixed library are not exported
15:26 < stepcut> and stuff...
15:46 < dsrogers> Saizan: my gripe with parseConfig is that Conf is not in SimpleHTTP so I can't make Conf contain a default 404 or 500 error handler
15:46 < dsrogers> oh man.
15:46 < dsrogers> I seriously broken my Happstack installation
15:47 < stepcut> dsrogers: :)
15:47 < dsrogers> WTF did I do wrong? http://hpaste.org/fastcgi/hpaste.fcgi/view?id=1426#a1426
15:47 < dsrogers> I just did a build-install-all.sh
15:47 < dsrogers> with some local changes.
15:47 < dsrogers> now building outside of Happstack hates me.
15:48 < stepcut> dsrogers: you probably need to do a clean first
15:48 < dsrogers> I did.
15:48 < stepcut> dsrogers: hrm, it really looks like you have a Test.o that was  built before you upgraded happstack
15:49 < dsrogers> clean all, then build all
15:49 < dsrogers> I'll try again..
15:49 < stepcut> dsrogers: did you also clean up Test.o ?
15:49 < dsrogers> rm *.hi *.o && ghc Test.hs gives the same problem.
15:49 < stepcut> I assume you mean, ghc --make Test.hs ?
15:50 < dsrogers> OF COURSE I meant --make
15:50  * dsrogers facepalms
15:50 < stepcut> ;)
15:52 < mae__> hehe
15:54 < stepcut> mae__: what text editor do you use?
15:54 < stepcut> mae__: if that's not too personal of a question
15:56 < dsrogers> what's the ghc flag to turn on deprecation warnings?
15:56 < stepcut> -Wall ?
15:57 < stepcut> -fno-warn-warnings-deprecations turns them off, maybe they are on by default
15:57 < stepcut> "Warnings and deprecations are not reported for (a) uses within the defining module, and (b) uses in an export list. The latter reduces spurious complaints within a library in which one module gathers together and re-exports the exports of several others."
15:58 < mae__> stepcut, dsrogers: i don't think ghc 6.8.3 supports that flag
15:58 < mae__> i had to take it out of the cabal
15:58 < mae__> stepcut: I use vi, and gedit
15:58 < mae__> with envy code r font
15:59 < stepcut> mae__: thought so
15:59 < mae__> never quite got accustomed to emacs
15:59 < mae__> stepcut: why? :)
15:59 < stepcut> mae__: your coding style seems to indicated that you don't have emacs assisted tabbing
15:59 < mae__> heh, oh really? :)
15:59 < stepcut> yeah, like:
15:59 < stepcut> myfunc = do
16:00 < stepcut>    foo
16:00 < stepcut>     bar
16:00 < mae__> yeah, that is purposeful, I don't like it when indentation space is wasted
16:00 < stepcut> (oops, delete a space before bar)
16:00 < stepcut> that too, you indentation amounts are smaller than the emacs defaults
16:00 < mae__> i use 2 spaces most of the time
16:00 < mae__> but i try to maintain whatever i find in a particular file
16:01 < stepcut> anyway that makes no sense, todays monitors are much wider than they are tall, you should be worried about vertical space ;)
16:01 < mae__> heh
16:01 < mae__> ok well
16:01 < mae__> how do you code datatypes?
16:01 < mae__> I like this style:
16:01 < mae__> data Foo
16:01 < mae__>   = Con1
16:01 < mae__>     { foo :: String
16:02 < mae__>     , bar :: String }
16:02 < mae__>   deriving (Show)
16:02 < mae__> (if i had another constructor it would be)
16:02 < mae__>   | Con2
16:02 < mae__>     { foo :: String }
16:03 < mae__> i mean, theres so many ways to do it in haskell :)
16:03 < stepcut> I usually do it:
16:03 < mae__> tell me what you don't like, I am open to suggestions
16:03 < stepcut>  
16:03 < stepcut> data Foo
16:03 < stepcut>     = Con1
16:03 < stepcut>       { foo :: String
16:03 < stepcut>       , bar :: String
16:03 < stepcut>       }
16:03 < stepcut>     | Con2
16:03 < stepcut>       { baz :: String
16:03 < stepcut>       , buz :: String
16:03 < stepcut>       }
16:03 < stepcut>     deriving (Show)
16:03 < mae__> ahh, your losing vertical space :)
16:03 < stepcut>  
16:03 < mae__> but yeah actually i did it like that
16:04 < mae__> i changed to the former style rather than yours so it uses up less lines
16:04 < stepcut> well, I have 30" display, but rotated 90?
16:05 < stepcut> I like all the markes { , } in the same column cuz it looks pretty
16:05 < stepcut> it's all unbalanced with that trailing marker all on the wrong side :)
16:05 < mae__> Ahh, I only have a 24 " :)
16:06 < stepcut> I think mine is actually only 19", but maybe later this year
16:06 < mae__> ok so
16:06 < mae__> I have 2 questions for you.
16:06 < mae__> 1. Where is the patch, I thought it was mostly done :P
16:06 < stepcut> did I say it was mostly done?
16:06 < mae__> 2. When will hyena be cabalized?, I would like to do Happstack.Server.Hyena for 0.3 release
16:07 < stepcut> hyena is already cabalized
16:07 < mae__> cool
16:07 < mae__> but not on hackage?
16:08 < stepcut> yeah, I think it only lives in git right now
16:08 < mae__> 404
16:08 < mae__> http://hackage.haskell.org/cgi-bin/hackage-scripts/package/hyena
16:08 < mae__> you should ask his permission to upload it on hackage :)
16:09 < stepcut> well, he is doing a major release any day now that changes it all up, so I think he is waiting until that is done
16:09 < mae__> cool
16:09 < mae__> so re #1, your not almost done? :)
16:09 < stepcut> we should wait until that release of hyena before we start supporting it officially
16:09 < stepcut> mae__: no, but I am going to commit something soon anyway :)
16:10 < mae__> re hyena: i agree
16:11 < stepcut> I am going to commit something that is feature complete, but it needs some love before it is suitable for didactic purposes
16:11 < mae__> right
16:11 < mae__> well, there needs to be alot of love
16:11 < mae__> but you know what they say, release early and often :)
16:11 < mae__> peer review
16:11 < stepcut> tell that to knuth
16:12 < stepcut> or dijkstra ;)
16:18 < mae__> yeah well
16:19 < mae__> theres a difference between a master architect and massive peer review
16:19 < mae__> we are the latter :)
16:19 < gwern> they're both dead though
16:19 < gwern> at least, knuth will be not too logn from now
16:19 < mae__> no one is getting paid for #1
16:19 < gwern> (he's old!)
16:19 < mae__> yeah..
16:38 < stepcut> h_buildbot: do it now mofo!
16:38 < h_buildbot> Use: build, status, pause, resume, ping
16:38 < stepcut> h_buildbot: build
16:38 < h_buildbot> Build for all started. If one was running, no new one is started.
16:47 < 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.
16:48 < mae__> oh man
16:48 < mae__> you just told it to build everything
16:48 < mae__> bummer
16:48 < mae__> should have just waited
16:49 < stepcut> I am, perhaps, disturbed that it worked
16:50 < mae__> stepcut: ok so, did you update the code in commands/happstack.hs too?
16:50 < stepcut> no
16:51 < mae__> k
16:51 < stepcut> oh, I see it built stable :)
16:51 < stepcut> I forgot about that
16:51 < mae__> yeah now it will build all four targets
16:51 < stepcut> well, I am glad I did not break stable :)
16:53 < mae__> happstack-0.1.9 failed during the final install step. The exception was:
16:53 < mae__> templates/project/public/theme/images/Thumbs.db: copyFile: does not exist (No
16:53 < mae__> such file or directory)
16:53 < dsrogers> how do I get haddock to tell me where the parse erro in the doc string was?
16:54 < mae__> hehe i will remove that from the cabal file stepcut
16:54 < mae__> (Thumbs.db)
16:55 < mae__> ok pushed
16:56 < dsrogers> fuck!  haddock dies and doesn't tell me where!
16:56 < dsrogers> bad haddock! no cookie!
16:56 < stepcut> dsrogers: fromJust Nothing ?
16:57 < stepcut> mae__: oops, I removed some of those, but not all I guess
16:57 < dsrogers> pardon?
16:57 < stepcut> dsrogers: did haddock die with the error, fromJust Nothing ?
16:57 < dsrogers> haddock: parse error in doc string
16:57 < stepcut> ah
16:57 < mae__> stepcut: I like all the stuff you added in main, but I think much of this belongs in a module, and not in a skeleton, no?
16:58 < stepcut> then I have nothing useful to offer
16:58 < stepcut> mae__: you are the fucker that told me to commit it before I was done with that shit ;)
16:58 < mae__> stepcut: haha! touchy, ok sorry, this is the "peer review" part.
16:58 < stepcut> :p
16:59 < stepcut> but, it belongs somewhere, perhaps in a reusable module
16:59 < stepcut> I have not worked that all out yet
16:59 < mae__> stepcut: ok sure, do you wanna talk some of this out?
16:59 < stepcut> mae__: sure, but I am eating right now
17:00 < 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.
17:00 < mae__> stepcut: lol ok then let me just make my commentary, please don't bite my head off, I'm just giving feedback ):
17:00 < stepcut> mae__: I was just kidding :)
17:00 < mae__> k
17:00 < mae__> whew thats good.
17:00 < stepcut> there is a bunch of cleanup that needs to be done
17:00 < dsrogers> gurrr!
17:01 < dsrogers> this is seriously annoying
17:01 < stepcut> mae__: I also mostly disregarded existing style conventions too :)
17:02 < stepcut> mae__: And I didn't do much in the way of comments
17:02 < stepcut> mae__: so there is plenty left to do
17:03 < stepcut> mae__: but, I think feature wise it has all the critical stuff
17:03 < stepcut> mae__: so, it's mostly just making it not suck now
17:03 < stepcut> mae__: I think I want to move the HSP code out of AppControl, and stuff like that
17:04 < mae__> ok so here is one thing, I wanted AppControl to only have the "control" aspects of the app. I was thinking the hsp stuff should be in its own module, so the view is at least a little separated.
17:04 < mae__> The reason for this is that, I think if there are fewer imports, it is easier for the beginner to follow what is going on
17:04 < stepcut> right
17:04 < stepcut> I just said that :p
17:04 < mae__> yeah o
17:04 < mae__> k
17:04 < mae__> well i started writing before you said that :)
17:05 < mae__> hmm
17:05 < mae__> seems to be borked on my machine
17:05 < stepcut> also, if done correctly, we could use the same AppControl but have a Text.Html version perhaps
17:05 < mae__> stepcut: thats exactly my though
17:05 < mae__> so i want a builtin function which does this
17:05 < mae__> i.e.
17:05 < mae__> maybe the ToMessage class
17:06 < mae__> there is an instance for the hsp stuff
17:06 < mae__> to make the gluing super simple.
17:06 < h_buildbot> Build for ghc-6.8.3 failed. Check http://buildbot.happstack.com/ for details.
17:07 < mae__> aww man
17:07 < mae__> broken!
17:07 < stepcut> mae__: there is a ToMessage instance of HSP's XML data type in happstack.HAppS.Server.HSP.HTML
17:07 < mae__> say no more.
17:07 < stepcut> mae__: but you need another function to turn the, HSP XML into plain XML because that has to happen in the IO monad
17:07 < stepcut> and toResponse is pure, a -> Response
17:08 < mae__> so perhaps
17:08 < mae__> instead of
17:08 < mae__> import Happstack.Server.HSP.HTML (webHSP)
17:09 < mae__> err opk
17:09 < mae__> ok
17:09 < mae__> so what if i want XML?
17:09 < mae__> will there be an import Happstack.Server.HSP.XHTML (webHSP) ?
17:09 < stepcut> there should be, but there isn't yet
17:09 < mae__> webHSP assumes you want html 4.01 strict ?
17:10 < mae__> (k
17:10 < mae__> k *
17:10 < stepcut> regarding html 4.01 strict, yes and no
17:10 < stepcut> or maybe just no, let me double check
17:10 < mae__> stepcut: do you understand what i was trying to get at with the whole postEntry getEntries bits)
17:11 < h_buildbot> Build for ghc-6.10.1 failed. Check http://buildbot.happstack.com/ for details.
17:12 < stepcut> mae__: webHSP mostly does not assume anything about your doctype. You set it when you create your HSP XML values, and it uses that
17:12 < stepcut> pageFromBody title body =
17:12 < stepcut>     withMetaData html4Strict $
17:12 < stepcut>     <html>
17:13 < stepcut> if you don't it it there, then your page just does not have a DOCTYPE
17:15 < mae__> ah
17:15 < mae__> well what i mean to say is
17:15 < mae__> it will output sgml, rather than strict xml, right?
17:15 < mae__> <input name
17:15 < stepcut> mae__: no, it outputs html with is neither sgml or xml
17:15 < mae__> <input name="blah"> instead of <input name="blah" />
17:16 < stepcut> yes, it works like that
17:16 < mae__> and <br> instead of <br /> etc etc
17:16 < stepcut> right
17:16 < mae__> k
17:16 < stepcut> <textarea></textarea> instead of <textarea />
17:16 < mae__> so i see that you nuked the index.html :(
17:17 < stepcut> and the contents of the <script> tag is also properly encoded
17:17 < stepcut> :(
17:18 < stepcut> I needed more room for my porn collection?
17:18 < mae__> em
17:18 < mae__> Well, we need to put "you are running Happstack <ver>! Ra ra ra!" somewhere
17:19 < stepcut> yeah, we should add it at the top of this page, http://hacketeria.com/
17:19 < stepcut> or, we can add a second page called "Home" and add it to the nav bar at the top
17:21 < stepcut> we could put it in paragraph right before "Leave a message in the guestbook" ?
17:21 < stepcut> mae__: oh, did you see that I changed it so that it doesn't say "Comments" anymore?
17:21 < mae__> yep
17:22 < stepcut> I also had hotkeys ;)
17:22 < mae__> i was trying to be restful before with the whole /entries thing
17:22 < mae__> you no likey? :)
17:23 < stepcut> mae__: it's restful... there is only one API call, "/" ?
17:23 < mae__> stepcut: right, but again, the guestbook isn't the only expose.
17:23 < mae__> i still need to put possibly a separate example for the hsp stuff, but i guess i could include it in the main index page
17:24 < mae__> KISS.
17:24 < stepcut> appHandler :: [ServerPartT IO Response]
17:24 < stepcut> appHandler =
17:24 < stepcut>   [ dir "entries" [postEntry, getEntries]
17:24 < stepcut>   , fileServe ["index.html"] "public"
17:24 < stepcut>   , seeOther "/entries" (toResponse ())
17:24 < stepcut>   ]
17:24 < stepcut> ?
17:25 < mae__> seeOther is a catch-all?
17:25 < mae__> a redirect?
17:26 < stepcut> seeOther is a redirect (303). It is a catch-all in that particular instance... though I meant for it to only match on "/"
17:27 < mae__> thats fine, but semantically, do we want the guestbook to be the first loaded page
17:27 < mae__> put yourself in the shoes of someone who has just carefully unwrapped the seran-wrap covered "toy" happstack
17:27 < stepcut> well, right now it is the only page...
17:28 < mae__> it is prettier than my index.html
17:28 < mae__> thats for sure
17:28 < mae__> but there are two issues
17:28 < mae__> 1. I think that having 'entries' shows a restful style that newbs can learn from, however, i think having the api calls go to / is fine
17:28 < mae__> a more thorough example can be posted online later
17:29 < mae__> this should be simple and straightforward, so what you did can stay
17:29 < stepcut> yeah, I have issues with the entries thing
17:29 < mae__> 2. If the guestbook is to be the first page
17:29 < mae__> it needs to be turned into a hybrid
17:30 < mae__> more like "Hey congrats your using happstack <ver>. This is a guestbook example which you can freely change to your whims and fancies. Leave a message for the next visitor here..."
17:30 < mae__> links to resources should also be in this page
17:30 < mae__> i.e., website, mailing list, wiki, issue tracker
17:30 < stepcut> there are links on the left, we can add more
17:31 < mae__> a link to the tutorials listing
17:31 < mae__> k
17:31 < mae__> i like it overall
17:31 < stepcut> the current link takes you to the page with all the links you just mentioned... do we want to maintain those links in two places?
17:32 < mae__> my complaints are: firstly the hsp is not split into a separate module, secondly that the alot of the functionality that was added in Main should be put into a new module (or existing where it makes sense), and thirdly I am not thrilled with the large increase in import statements overall :)
17:33 < mae__> stepcut: thats true, but i think at the very least it should list the homepage and a link to the tutorials.
17:33 < stepcut> mae__: takes a lot of imports to get anything done :)
17:33 < mae__> stepcut: yep, but we should try hard to narrow the amount of knowledge someone has to cram into their head on the first pass
17:34 < mae__> the recursive process of looking up each library module that is imported is necessary and painful but if we can avoid some then thats good. :)
17:34 < stepcut> so, did you want me to template haskell to fill in <ver> in 'your using happstack <ver>.' automatically?
17:34 < mae__> that would be nice
17:34 < mae__> can we do that for cabal too? :)
17:35 < mae__> hehe
17:35 < stepcut> can I change it to, "you're"?
17:35 < mae__> stepcut: grammatical corrections are approved.
17:35 < mae__> HE HE
17:37 < stepcut> anyway, the extra stuff in Main I would like to make more general so that you can easily reuse it in any app. I'll stick that in happstack-kitchensink
17:37 < stepcut> and I do want to move HSP stuff into a separate module
17:37 < mae__> stepcut: is that the unofficial aka for happstack (meta) now? :)
17:38 < stepcut> it's confusing that there is happstack the project and happstack the package
17:38 < mae__> agreed
17:38 < mae__> do you think we should change it?
17:38 < stepcut> if we changed, appHandler :: [ServerPartT IO Response], to, appHandler :: [ServerPartT IO GuestBook]
17:39 < stepcut> then in Main.hs we could do something like,
17:39 < stepcut>   httpTid <- forkIO $ simpleHTTP (httpConf appConf) (appHandler >>= \gb -> case mode of HSP -> renderWithHSP gb ; ST -> renderWithStringTemplate gb)
17:40 < mae__> hm.
17:41 < stepcut> mae__: we don't have to change it, we can just white knight it
17:41 < mae__> nah i don't like that
17:41 < stepcut> mae__: well, we shouldn't change main like that
17:41 < mae__> it adds complexity where it isn't useful for the programmer
17:41 < mae__> secondly, I don't intend hstringtemplate as a pure alternative for hsp
17:41 < mae__> i see it more as an overlap with different properties
17:42 < mae__> i.e. if i can't do it in hsp, well i can hack it together with an hsp template
17:42 < stepcut> mae__: well, that stuff in Main is a bit misleading
17:42 < mae__> err
17:42 < mae__> hstringtemplate
17:42 < stepcut> so lets back up a second
17:42 < mae__> s/hsp template/hstringtemplate/
17:42 < stepcut> if we change appHandler as suggested, then AppControl does not have any code dealing with the specific library used to generate the HTML
17:43 < stepcut> in some other module, you have the code that deal with actually rendering the page
17:43 < mae__> ok sure
17:43 < stepcut> and, that code could use HSP, Text.XHtml, etc
17:43 < mae__> but then you assume that GuestBook knows everything that needs to be rendered on that page
17:43 < mae__> and it forces you to separate where it is not natural sometimes
17:43 < mae__> the same thing happens with ActiveRecord in ruby on rails
17:44 < mae__> well i mean, your talking about the scenario where you have the handler return the type IO GuestBook right?
17:44 < stepcut> yes, though it could be another type if there was more than just a GuestBook
17:45 < mae__> so then you end up creating types for every page you render
17:45 < stepcut> yep
17:45 < mae__> this would work into your idea for 404 no more in the future, right?
17:45 < stepcut> dunno, it is somewhat independent
17:45 < mae__> well
17:45 < mae__> that idea requires strong typing right
17:45 < mae__> as opposed to simple string matching
17:46 < Saizan_> it's kind of the dual
17:46 < stepcut> mae__: depends. one way of doing that in happstack today is to use the happtack XML stuff. impl :: [ServerPartT IO XML], and then use xslt to transform the data into pages
17:47 < mae__> stepcut: right, so that takes the view out of the serverpart
17:47 < stepcut> yes
17:47 < mae__> so then where do you connect the xslt?
17:48 < stepcut> mae__: I forget. I think you could do something like, simpleHTTP nullConf (doXSLT "xslt.sty" impl)
17:49 < mae__> hm
17:49 < mae__> that is kind of a big hammer for a small nail
17:49 < stepcut> where doXSLT transforms the XML to a Response
17:49 < mae__> what if you don't want to use xslt on everything
17:49 < mae__> ok so here is another idea
17:49 < stepcut> there are serverpart versions of doXSLT as well
17:49 < mae__> what if we start separating up server parts by mime type
17:49 < mae__> so that way simpleHTTP can handle content negotiation
17:50 < mae__> i.e. [ServerPartT IO (MIME "text/html")] for instance
17:51 < mae__> just an idea to add to this
17:52 < stepcut> 0
17:52 < stepcut> oops
17:52 < mae__> by doing this we sacrifice the ability for the serverpart to change its mimetype on the fly, however.
17:53 < mae__> I think its better, as you suggested, to create datatypes for views.
17:53 < mae__> you could map a Data type to a path
17:53 < mae__> (but this might be getting into the "too much magic" zone)
17:54 < mae__> data GuestBookApp
17:54 < mae__>   = ViewGuestBook
17:54 < mae__>   | ViewGuestBookEntry Int
17:55 < mae__>   | DeleteGuestBookEntry Int
17:55 < stepcut> mae__: interesting idea, have I every shown you this: http://src.seereason.com/~jeremy/SimpleSite1.html
17:55 < mae__>   | PostGuestBookEntry
17:55 < mae__>   | PutGuestBookEntry GuestBookEntry
17:55 < stepcut> > data Gallery
17:55 < stepcut> >    = Thumbnails
17:55 < stepcut> >    | ShowImage Int Size
17:55 < mae__> (that needs to be on post as well)
17:55 < stepcut> >    deriving (Read, Show)
17:56 < mae__> yeah i've seen it
17:56 < mae__> i want to implement it
17:56 < mae__> so the thing is
17:56 < stepcut> :)
17:56 < mae__> we can move towards some of these ideas
17:56 < mae__> but we need to do it in babysteps
17:56 < mae__> i want 0.2 out on march 4th
17:56 < mae__> so what is step 1
17:56 < mae__> step 1 that will not throw stuff into chaos
17:57 < stepcut> step 1 is to finish the guestbook application?
17:57 < mae__> hehe yeah
17:57 < dsrogers> how do I resolve conflicts in darcs?
17:57 < mae__> but i mean
17:58 < stepcut> dsrogers: in your local repo?
17:58 < dsrogers> I pulled a patch that conflicts with mine.
17:58 < dsrogers> now I have conflict markers in a file.
17:58 < mae__> stepcut: [ServerPartT IO HSP] works right?
17:58 < dsrogers> I haven't pushed this patch yet.
17:58 < stepcut> dsrogers: yeah, edit the code until you like it, and then commit a new patch
17:59 < dsrogers> ok.
17:59 < wchogg> dsrogers : I don't think there's anything to do other than manually editing
17:59 < dsrogers> can I just amend-record?
17:59 < stepcut> dsrogers: no idea
17:59 < wchogg> Ah, you recorded the patch but didn't push it?
17:59 < stepcut> mae__: [ServerPartT IO (HSP XML)] ought to work
17:59 < mae__> you can unrecord it can't you
17:59 < mae__> and then rerecord
17:59 < mae__> stepcut: where do i tell it whether i want html or xhtml output?
18:00 < dsrogers> wchogg: yes
18:00 < wchogg> I think that's essentially what amend-record is.
18:00 < mae__> stepcut: I don't like the fact that this forces you to use hsp.
18:00 < stepcut> mae__: when you import webHSP from HSP.HTML vs HSP.XHTML
18:01 < stepcut> mae__: that what forces you to use HSP?
18:01 < mae__> stepcut: can't we do  ToMessage r => [ServerPartT IO r]
18:01 < stepcut> mae__: no, turn HSP XML into a Response involves IO
18:02 < stepcut> but toResponse is a pure function
18:03 < mae__> stepcut: so to stay flexible in simpleHTTP it has to be [ServerPartT IO Response], right?
18:03 < mae__> otherwise we have to choose at compile time
18:03 < stepcut> what does 'it' refer to ?
18:04 < mae__> appHandler
18:05 < stepcut> as I suggested, appHandler could just return a non-HTML related value, and we could have other functions which turn that return value into HTML
18:05 < dsrogers> ok!  I got it!
18:05 < dsrogers> mae: don't apply this one yet.
18:05 < dsrogers> I still need to write an email.
18:05 < dsrogers> ;-)
18:07 < mae__> lol
18:08 < mae__> stepcut: I guess i really don't understand what you mean by that :)
18:08 < stepcut> chotto matte kudasai
18:08 < mae__> stepcut: but if it will allow items that are not generated by hsp (non-xml, plain text, etc) to be returned, then that is fine.
18:09 < stepcut> returned by appHandler?
18:10 < mae__> right
18:11 < stepcut> you can already return non-hsp items in appHandler
18:12 < mae__> right, because the signature is appHandler :: [ServerPartT IO Response]
18:12 < mae__> i was addressing the idea of returning HSP or XML
18:13 < mae__> ok, well, i think you are more on track than I am anyways, so I will trust your judgement.
18:13 < stepcut> well, if you return [ServerPart IO (HSP XML)], then you can only return HSP XML, I can't do anything about that...
18:13 < mae__> But i will be adding something that uses hstringtemplate to that example, probably some text/plain or javascript.
18:14 < mae__> stepcut: ok, so, shall I continue to let you work on this and move on to the multimaster stuff then?
18:15 < mae__> i don't wanna get in your way.
18:16 < stepcut> are we going to fix that bug in happstack-state that causes data loss during congestion for 0.2?
18:16 < mae__> if we can, yeah, I'm not even sure yet that it is a "real" bug.
18:17 < stepcut> i am :)
18:17 < mae__> it will require more testing, and understanding.
18:17 < mae__> so back to my question
18:18 < mae__> should I just steer clear of the guestbook app stuff while you do the cleanup?
18:18 < stepcut> sure
18:18 < mae__> ok.
18:18 < mae__> gotta run, thanks jeremy.
18:18 < stepcut> i updated the API for you
18:18 < mae__> k, i'll look at the patch :)
18:19  * stepcut tries to think imperatively for a bit
18:26 < h_buildbot> Build for ghc-6.8.3 failed. Check http://buildbot.happstack.com/ for details.
18:30 < h_buildbot> Build for ghc-6.10.1 failed. Check http://buildbot.happstack.com/ for details.
18:35 < dsrogers> ok..
18:35 < dsrogers> I've done my damage
18:37 < dsrogers> mae: the email I just sent is probably the release notes you needed.
18:37 < dsrogers> the list of non-backwards compatible changes is small.
18:53 < wchogg> Has anyone played with the Multimaster* programs from server/Examples?
18:55 < stepcut> I think I did once
19:53 < stepcut> maybe we should rename happstack to katamari
20:17 < koeien> my VPS is rebooting, buildbot should be back soon
20:18 < stepcut> koeien: did you add HSP 0.4.5 to the build environment?
20:18 < koeien> stepcut: cabal update should suffice?
20:19 < stepcut> koeien: no idea
20:21 < koeien> h_buildbot: status
20:21 < h_buildbot> Idle.
20:21 < koeien> h_buildbot: pause
20:21 < h_buildbot> Paused
20:34 < koeien> h_buildbot: resume
20:34 < h_buildbot> Resumed.
20:34 < koeien> h_buildbot: build ghc-6.10.1
20:34 < h_buildbot> Build for ghc-6.10.1 started. If one was running, no new one is started.
20:34 < koeien> h_buildbot: status
20:34 < h_buildbot> Building ghc-6.8.3
20:34 < koeien> hmm
20:34 < Axman6> :\
20:35 < koeien> h_buildbot: status
20:35 < h_buildbot> Building ghc-6.10.1
20:37 < h_buildbot> Build for ghc-6.10.1 failed. Check http://buildbot.happstack.com/ for details.
20:38 < stepcut> hrm, I wonder if I need a space in there
20:38 < stepcut> nm.
20:38 < koeien> stepcut: is hsp-0.4.5 on hackage?
20:38 < stepcut> yes
20:39 < stepcut> http://hackage.haskell.org/cgi-bin/hackage-scripts/package/hsp
20:39 < koeien> h_buildbot: pause
20:39 < h_buildbot> Paused
20:39 < koeien> h_buildbot: status
20:39 < h_buildbot> Paused.
20:40 < koeien> ah i need happy
20:41 < stepcut> for haskell-src-exts?
20:41 < koeien> yes
20:42 < stepcut> I think hsx requires haskell-src-exts == 0.4.3, btw
20:46 < dsrogers> where is the happstack tutorial?
20:47 < stepcut> http://tutorial.happstack.com/
20:47 < stepcut> ?
20:49 < dsrogers> yeah, that's the one.
20:50 < stepcut> there is a link to it from the front page of happstack.com
20:50 < stepcut> if you need to find it again
20:50 < dsrogers> I'm going to port the code to my new ServerPartT patch, to see where the existing API falls down.
20:50 < stepcut> cool
20:50 < stepcut> you could also try porting the guestbook in the happstack package
20:51 < dsrogers> oh yukky
20:51 < stepcut> ?
20:51 < dsrogers> head of happs-tutorial doesn't compile against happstack
20:51 < dsrogers> it wants HappS
20:52 < stepcut> :-/
20:52 < dsrogers> where is this guestbook thingy?
20:53 < stepcut> try this version: http://patch-tag.com/repo/happstack-tutorial/home
20:53 < stepcut> the guestbook is in the latest version of happstack in happstack/happstack/templates/project
20:55 < stepcut> a copy of the guestbook is temporarily running here: http://hacketeria.com/
20:57 < koeien> meh, i need trhsx, which fails to compile
20:58 < stepcut> koeien: what error?
20:59 < koeien> Trhsx.hs:1:0:
20:59 < koeien>     Failed to load interface for `Prelude':
20:59 < koeien>       it is a member of package base-3.0.3.0, which is hidden
20:59 < stepcut> :-/
21:00 < dsrogers> hmm.
21:00 < koeien> ah
21:00 < koeien> i need to put ~/.cabal/bin/ in the PATH
21:00 < koeien> otherwise everything explodes in my face
21:00 < dsrogers> happstack doesn't compile for me.
21:00 < dsrogers> src/Happstack/State/ClockTime.hs:9:7:
21:00 < dsrogers>     Could not find module `Data.Generics':
21:00 < dsrogers>       it is a member of package base-3.0.3.0, which is hidden
21:01 < stepcut> dsrogers: oh, that is an error in the .cabal, one moment
21:03 < stepcut> dsrogers: pull the latest and see if it works any better
21:04 < dsrogers> yep
21:04 < dsrogers> thanks
21:05 < Saizan> dsrogers: i'm not sure if it makes sense to have FilterMonad and WebMonad separate, and in any case the latter has a pretty bad name for what it does
21:05 < dsrogers> do you have a better suggestion?
21:06 < dsrogers> I don't think it makes sense to combine them...
21:06 < dsrogers> since FilterMonad is unrelated to the ErrorT that finishWith is built with.
21:07 < koeien> ghc: could not execute: trhsx
21:07 < koeien> it is in the path...
21:07 < stepcut> :-/
21:07 < koeien> i'm going to bed now, i'll see whether i can take care of it tomorrow
21:07 < stepcut> ok
21:08 < Saizan> dsrogers: so we're going to export FilterT? and consider it an useful monad on its own?
21:09 < dsrogers> Saizan: The reason I exported it was that sometimes you can't get away from taking apart a monad (e.g. when writing instances)
21:09 < dsrogers> though it is an interesting monad.  And stands on it own.  I'm just now sure how often it would be reused.
21:10 < wchogg> Okay, so what setup am I missing in order to get get MultimasterTest1 to do something other than "connect does not exist (connection refused)"?
21:11 < Saizan> i'm just worried about getting users confused by too many subparts/interfaces, when the final product is actually quite simple to use
21:11 < wchogg> Apparently I'm so emphatic that I want to get it twice.
21:12 < Saizan> wchogg: do you have the spread daemon running?
21:12 < wchogg> Saizan : I thought so.  What port do I need it running on?
21:12 < dsrogers> Saizan: yeah, that occurred to me, too.  I'm just not sure that taking away their ability to play with the innards is a good idea.  I'm leaning more towards helping people figure out how not to need to look at the innards, but documenting them when they need to do it.
21:13 < dsrogers> *them for when...
21:14 < Saizan> dsrogers: maybe FilterT should go in its own module then
21:14 < Saizan> i'm not sure..
21:14 < dsrogers> for example, I took out all references to WebT in the documentation.
21:14 < dsrogers> since you shouldn't have to care about it anymore.
21:15 < Saizan> wchogg: good question
21:15 < dsrogers> what is with me, and finding ghc bugs...
21:15 < dsrogers> I can't compile the happstack-tutorial.
21:15 < stepcut> wchogg: when you started the spread daemon, did it return the command-line, or keep running?
21:15 < dsrogers> because Crypto won't install because of a GHC bug.
21:15 < dsrogers> LAME
21:16 < wchogg> dsrogers : that'll be fixed very shortly when I make a new release.
21:16 < wchogg> stepcut : returned to the command-line
21:17 < wchogg> stepcut : does that mean it _didn't_ work?
21:17 < stepcut> wchogg: yes
21:17 < wchogg> stepcut : ...it'd be nice if it said so rather than "succesfully configured"
21:17 < stepcut> wchogg: yes it would
21:18 < wchogg> stepcut : I was worried about that, actually.  I didn't think I saw anything from it in my top
21:18 < stepcut> try, spread -n localhost
21:18 < stepcut> and see if that works any better
21:18 < wchogg> k
21:19 < wchogg> still returned to the command line
21:20 < dsrogers> and I can't compile guest book because "cabal: Unknown build tool trhsx"
21:20 < stepcut> dsrogers: you need to install hsp
21:20 < dsrogers> it is.
21:20 < dsrogers> and trhsx is in my path
21:21 < stepcut> hrm
21:21 < stepcut> wchogg: try making a spread.conf with this:
21:21 < stepcut> Spread_Segment  127.0.0.255:4803 {
21:21 < stepcut>  
21:21 < stepcut> 	localhost		127.0.0.1
21:21 < stepcut> }
21:21 < stepcut>  
21:21 < stepcut> and then do, spread -c spread.conf -n localhost
21:21 < Saizan> dsrogers: uhm, why FilterT (Either Response Response) rather than FilterT Response ?
21:22 < dsrogers> Saizan: you would probably get away with just Response there, but FilterMonad was troubling me in it's implementation
21:22 < wchogg> stepcut : that's what's in the default spread.conf file in /etc/spread ..?
21:22 < dsrogers> Saizan: because when you runErrorT, you end up with an Either Response a
21:22 < stepcut> wchogg: this is what is in the spread.conf that works for me
21:23 < dsrogers> inside your monad.  So ... that's the result you end up having to filter.
21:23 < dsrogers> you could probably work around it somehow...
21:24 < wchogg> stepcut : Damn.  I tried it & I'm still getting it returning straight to the command line
21:24 < stepcut> wchogg: where did you get spread ?
21:24 < wchogg> stepcut : From the ubuntu 8.04 repos
21:25 < stepcut> wchogg: yeah, that version does not work for me, I had to download the binary from the spread site and use that
21:25 < Saizan> dsrogers: i see, i'll take a look
21:25 < wchogg> stepcut : ...wow.  Alright, I'll try that.  Thanks.
21:26 < Saizan> stepcut: spread-4?
21:26  * Saizan fears that he'll have to fix plenty of bugs
21:26 < wchogg> Saizan : bugs from which?
21:26 < Saizan> in hspread :)
21:27 < dsrogers> I just did a cabal update && cabal upgrade.  Apparently my version of cabal doesn't know anything about trhsx
21:27 < stepcut> Saizan: I downloaded spread-4 from the official site, hardy only has 3.17
21:27 < dsrogers> so no sample project for me.
21:27  * stepcut is trying to figure out the trhsx issue
21:27 < dsrogers> ah, thanks
21:27 < Saizan> what is using trhsx as a build-tool?
21:28 < dsrogers> the sample guest book application
21:28 < Saizan> ah
21:28 < Saizan> they forgot to use Custom in the build-type
21:29 < stepcut> forgot == didn't know to
21:29 < stepcut> but, it works for me :(
21:29 < stepcut> oh
21:29 < stepcut> I did, runhaskell Setup.hs configure --user && runhaskell Setup.hs build
21:29 < stepcut> that is probably why
21:30 < stepcut> ok, now I get the error because I used cabal install
21:30 < Saizan> pushed
21:30 < Saizan> yeah, if you call Setup.hs directly there's not problem
21:31 < Saizan> but with build-type: Simple cabal-install ignores it
21:31 < stepcut> Saizan: yeah, once you mentioned it I instantly understood :)
21:31 < stepcut> works for me now, thanks
21:33 < Saizan> i guess the point of build-type is not very clear in general, i wonder if there's a ticket about this
21:36 < Saizan> (yup, http://hackage.haskell.org/trac/hackage/ticket/479 )
21:37 < stepcut> grr. Actionscripts Array class as a 'join' function, but it's really intercalete, not join :: Array (Array) -> Array :(
21:37 < stepcut> ah, they have a concat though
21:37 < stepcut> good enough ;)
21:50 < dsrogers> I'll have a follow up patch to my big one soon.  It finishes generalizing the types in SimpleHTTP (by eliminating most references to runServerT and withRequest), and addresses some limitation in the module when using do blocks to construct requests.
21:51 < dsrogers> e.g. generalizing see otherOther, so that you never have to do anyRequest $ seeOther "/" ""
21:51 < dsrogers> *seeOther
21:51 < dsrogers> because seeOther can work in the ServerPartT just fine now...
21:54 < wchogg> dsrogers : are you going to expose a version of simpleHTTP that isn't restricted to just IO?
21:54 < dsrogers> I tried to do that...
21:55 < dsrogers> the problem is that simpleHTTP depends on Listen.listen, and that wants a handler in the IO monad.
21:55 < wchogg> ...and then the building exploded?
21:55 < wchogg> Huh
21:55 < dsrogers> and you can't get around it because it wants to catch exceptions and that can /only/ happen in the IO monad.
21:56 < dsrogers> what you want is simpleHTTP'
21:56 < dsrogers> which was taken out of the exports for some reason.
21:57 < dsrogers> or something close to it.
21:57 < wchogg> dsrogers : right.  I presume there was something wrong with it.
21:58 < dsrogers> Looks fine to me.  It got simpler too.
21:58 < dsrogers> runWebT $ runServerPartT part request will have you a m Maybe Response
21:58 < dsrogers> that's 90% of what you want.
21:59 < wchogg> stepcut : Using spread 4 & the command line options you suggested fixed everything.  Stuff appears to be working right.
21:59 < wchogg> stepcut : So thanks for that.
22:00 < Saizan> wchogg: which arch are you on?
22:00 < wchogg> Saizan : x86
22:01 < Saizan> thanks
22:04 < dsrogers> errorHandlerSP seems silly.  Why can't we just try-catch?
22:07 < wchogg> Saizan : are you just trying to take stock of the arch's of the devs?
22:08 < Saizan> wchogg: of the archs where hspread is known to work :)
22:08 < wchogg> Saizan : ah!
22:13 < stepcut> wchogg: cool, spread is very delicate to get started, but once it starts it seems to work well
22:13 < wchogg> stepcut : Yeah, I'll have to include some directions & caveats in the relevant chapter of the happs tutorial
22:14 < stepcut> yeah
22:26 < wchogg> Hrmm...so I'm still trying to get some intuition for multimaster.  It doesn't look like instances of happstack connected via multimaster need to have the same data structures in their state, but if they do then changes to that datastructure are consistent across all instances?  Probably a horrible way to say that.
22:28 < stepcut> wchogg: no idea
22:28 < wchogg> stepcut : then I might have to use Science to find out
22:28 < stepcut> good plan
22:29 < wchogg> is Science (capital s) ever a bad plan?
22:29 < stepcut> never
22:34 < Saizan> dsrogers: btw, you use monad where you actually mean action or computation or monadic value, the monad is only the type-constructor
22:35 < dsrogers> wchogg: this is probably what you want http://hpaste.org/fastcgi/hpaste.fcgi/view?id=1430#a1430
22:36 < dsrogers> Saizan: you're talking about the documentation?
22:36 < Saizan> dsrogers: yup
22:36 < dsrogers> ok, I'll fix that on my next pass
22:37 < dsrogers> that's a good function right there.  You just have to unpack your interior monad into an IO.
22:37 < gwern> we can solve all of Happstack's problems - WITH SCIENCE!
22:38 < Saizan> dsrogers: ah, also array instead of list
22:38 < dsrogers> ok
22:38 < wchogg> gwern : AND SHOUTING!
22:38 < dsrogers> list is [ ...]?
22:39 < Saizan> yes
22:39 < dsrogers> ok
22:39 < Saizan> arrays are the ones from Data.IArray or Data.MArray
22:39  * dsrogers 's new at haskell is showing
22:39 < dsrogers> I'll make a note of that too.
22:40 < dsrogers> simpleHTTP'' is also a replacement for errorHandlerSP.
22:40 < dsrogers> so me likey
22:40 < Saizan> you handle monads pretty well for being new :)
22:40 < dsrogers> well partial replacement..
22:41 < dsrogers> I stared at them a long time.  I've done nothing with haskell for months and months.  now it's all starting to click.
22:41 < Saizan> errorHandlerSP is not tied to listen
22:42 < dsrogers> good point.  I mean the notion of passing in a function to convert your interior monad.
22:43 < dsrogers> because you have to write something almost exactly like errorHandlerSP whenever you want to embed a different monad into ServerPartT
22:43 < dsrogers> because simpleHTTP /must/ take a ServerPartT IO a
22:44 < Saizan> ah, yeah, we should define a function like "mapServerPartT :: (forall a. m a -> n a) -> ServerPartT m a -> ServerPartT n a"
22:45 < dsrogers> a typeclass, even.
22:45 < dsrogers> then create instances for the common monad transformers
22:45 < Saizan> parametrizing on what?
22:45 < Saizan> ServerPartT?
22:46 < dsrogers> hmm.
22:46 < dsrogers> ServerPartT would be good enough.
22:47 < dsrogers> otherwise you need a family of functions.  One for every possible monad pair.
22:47 < Saizan> autolifting instances already have an exponential blowup with a single parameter :)
22:48 < dsrogers> you mean in the type calculation?
22:48 < Saizan> i'm not sure an instance is really worthwile here
22:48 < Saizan> no, in the number of them
22:49 < Saizan> or just quadratic?
22:50 < Saizan> yeah, quadratic, if you've N monads with corresponding N classes, you need to write N^2 instances
22:50 < dsrogers> I'm thinking class ToIO m where { toIO ::  t m a -> t IO a }
22:50 < dsrogers> so one instance per monad
22:50 < dsrogers> or even make t a ServerPartT
22:51 < Saizan> it's hard to find a monad for which you can write an useful instance
22:52 < Saizan> just exporting mapServerPartT will be enough, you don't really need overloading here
22:53 < Saizan> don't let the polymorphism catch you :)
22:53 < Saizan> the rule of thumb for needing a new typeclass is that you don't.
22:54 < dsrogers> ah
22:55 < dsrogers> in which case you still need to write useful m a -> n a functions...
22:55 < dsrogers> one for ReaderT, WriterT, StateT and ErrorT, all to IO, at least.
22:55 < dsrogers> ReaderT IO ... rather
22:56 < dsrogers> because those are the common case.
22:56 < dsrogers> well you don't /need/ too.  But people are going to end up writing them a lot.
22:57 < Saizan> they are usually trivial, \m -> runFooT m arg1 arg2
22:57 < dsrogers> yeah, this is true.
22:58 < Saizan> thinking about it that type is too restrictive
22:58 < dsrogers> which type?
22:59 < Saizan> the one i proposed for mapServerPartT
22:59 < Saizan> "mapState :: ((a, s) -> (b, s)) -> State s a -> State s b
22:59 < Saizan> for example
23:00 < Saizan> mapStateT :: (m (a, s) -> n (b, s)) -> StateT s m a -> StateT s n b
23:00 < dsrogers> ah
23:00 < dsrogers> this is reasoanble.
23:00 < dsrogers> and nicer too, when I think about it.
23:01 < dsrogers> ahhh..
23:01 < dsrogers> this is what localContext is for.
23:02 < Saizan> yeah
23:02 < dsrogers> only now it's not nearly as useful, since it's type is too specific.
23:02 < dsrogers> just adding a mapServerPartT (and mapWebT) seems like a good idea.
23:05 < dsrogers> mapWebT :: (m (Maybe ((Either Response a),SetAppend (Endo (Either Response Response)))) -> ...)
23:05 < dsrogers> there is a good argument right there for getting that extra Either out of there.
23:06 < Saizan> exactly :)
23:08 < dsrogers> and also some documentation...
23:08 < dsrogers> sheesh!
23:08 < dsrogers> talk about frightening to newcomers.
23:24 < dsrogers> ok got it.
23:25 < dsrogers> that clean up will go in my next patch.
23:31 < dsrogers> so mapWebT :: (m (Maybe ((Either Response a),SetAppend (Endo Response))) ...) is still quite a mouthful, but it's also not terribly complicated.  I'll drop in some examples of using mapWebT and mapServerPartT in the documentation.
23:34 < dsrogers> you will almost always be just carrying the filter over as is.  So there are really only three cases to deal with.
--- Log closed Mon Feb 16 00:00:14 2009