[web-devel] Type-safe URL handling

Michael Snoyman michael at snoyman.com
Wed Mar 24 23:48:22 EDT 2010


On Wed, Mar 24, 2010 at 3:36 PM, Jeremy Shaw <jeremy at n-heptane.com> wrote:

> On Mon, Mar 22, 2010 at 9:41 PM, Michael Snoyman <michael at 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/web-devel/attachments/20100324/0bcdba78/attachment.html


More information about the web-devel mailing list