[web-devel] Type-safe URL handling
Michael Snoyman
michael at snoyman.com
Thu Mar 25 13:29:13 EDT 2010
OK, here are my initial code comments:
* Do we want to move everything into Web.URLT? More to the point, I'm not
sure I see the point of calling this URLT, since it doesn't really require
any monad transformers; maybe we should call it web-routes and then the
module would be Web.Routes?
* I like the PathInfo class and to/fromPathSegments. Perhaps we should
bundle that with the decode/encodePathInfo into a single module?
* I'd like to minimize dependencies as much as possible for the basic
package. The two dependencies I've noticed are Consumer and
applicative-extras. I think the type signatures would be clearer *without*
those packages included, eg:
fromPathSegments :: [String] -> Either ErrMsg a
I'm not certain what exactly the type of ErrMsg should be here; I don't
really have a problem using [String], which would be close to the definition
of Failing.
* I think it's very important to allow users to supply customized 404 pages.
Essentially, we need to augment handleWai (possibly others) with a (ErrMsg
-> Application) parameter.
* It might be nice to have "type WaiSite url = Site url String Application".
By the way, are you certain you want to allow parameterization over the
pathInfo type?
The only packages that I feel qualified to speak about then are urlt and
urlt-wai, and my recommendation would be:
urlt contains decode/encodePathInfo, PathInfo class and related functions,
Site and related functions. If you agree on allowing the parameterization of
404 errors, then also provide a default 404 error.
urlt-wai contains WaiSite, handleWai and related functions.
I have not actually tested the code to make sure it's doing the right thing,
but I'm sure it's perfect and bug-free ;). I'll do thorough testing when I
have more than 10 minutes at the computer.
Michael
PS: In case you're wondering, we're visiting my in-laws in northern
California right now and are driving down to my parents in southern
California in a few hours, thus the erratic schedule...
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.
>
> - jeremy
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/web-devel/attachments/20100325/7b35d202/attachment-0001.html
More information about the web-devel
mailing list