On Wed, Mar 24, 2010 at 3:36 PM, Jeremy Shaw <jeremy@n-heptane.com> wrote:
On Mon, Mar 22, 2010 at 9:41 PM, Michael Snoyman <michael@snoyman.com> wrote:
If I'm not mistaken, I think that addresses all the issues on the table; is there anything left to decide? I look forward to seeing a sample URLT :).


There were other issues that came up, but nothing exciting enough to talk about.

I have pushed a patch which I think brings the code up to date in terms of functionality. See WaiExample for a detail of everything that is currently supported (aside from the happstack / hsp stuff).

The next steps are to:

 1. change the names of any functions or types that we do not currently like
 2. add the haddock documentation
 3. split the package into separate packages so that you don't have to pull in extra dependencies that you aren't going to use
 4. turn the WaiExample into a literate tutorial / blog post
 5. add a (simple) happstack example as well

So take a look and let me know what you think. Especially in regards to #1.

Then we can also look into how to extend the yesod mkResources stuff to work with this new code.

from a parsing point of view, we almost don't have to do anything, we could just do:

 [mkResource|  "/foo/:int/:int" = \i j -> mySite (Foo i j) |]

or whatever the syntax is. But that does not solve the issue of how to go from (Foo 1 2) back to /foo/1/2 and ensure that it is the inverse operation.


I don't have time right now to look at the code, but I will soon (I'm in the middle of traveling *again*). Regarding the mkResource issue, I think it's slightly more complicated, and what I was thinking of was a combination of TemplateHaskell and QuasiQuotes to address it:

* The quasi-quoted content will follow mostly the same syntax, though allowing you to specify the name of the constructor you wish to assign to each resource pattern.
* Since we now will need to have multiple top-level definitions being generated, quasi-quoting alone won't solve the issue. So I will have a quasi-quote function to convert the YAML syntax to a StringObject, and then a TH function to convert the StringObject to:

  1) A datatype for the URL.
  2) A pair to to/from functions.
  3) A dispatch function.

This is the point at which having WebPlug/HandleT becomes useful.

If that was too vague, just let me know and I'll clarify ;).

Michael