[web-devel] ANN: url-generic-0.1: Parse/format generic key/value URLs from record data types.

Vladimir Zlatanov vlado at dikini.net
Mon Jun 20 13:37:56 CEST 2011


>> expressions possible. For example having a compound page with several
>> different posts in it, expressed in the url. This language gives
>> control to the user to express exactly what content they want combined
>> and how. This power is often under estimated. The scenarios are too
>> many to mention.
>
> For example? What's an example of a compound page, expressed in the url?

Ok. Let's try. I'll simplify it a bit. This will assume that we have a
product combinator type

data Comb a b = Comb { left::a, right::b } deriving (Data,Typeable,Show)

Let's have a page which includes two different pieces of content side
by side, let's say product comparison.

The product type could be something like

data Product = Prouct { productId::Integer }

We should be able to form values of type

type TwoProducts = Comb Product Product

That type could be expressed in a URL like:
   http://example.com/Comb/Product/12/Product/14

The whole idea is to have the primitive resources as types, and to
provide the the necessary combinators - product, and maybe a sum one.



>> data Event = Event { eventId     :: Maybe Integer -- ^ The event id.
>>                    , eventScope  :: Bool          -- ^ Show the scope?
>>                    , eventLayout :: Layout        -- ^ Layout for the page.
>>                    , eventRec :: Rec
>>                    }
>> deriving (Data,Typeable,Show)
>>
>> data Rec = Rec { one :: Int, two :: Int }    deriving (Data,Typeable,Show)
>>
>> Would it be possible to express the above in a URL? I understand that
>> at the moment it is not, but what are your thoughts on how far it
>> would be reasonable to push the encoding.
>
> How would you expect that to be represented? I thought a little about
> it… it seems like if it was
>
>> data Rec = Rec { one :: Int, two :: Int }    deriving (Data,Typeable,Show)
>
> Then you could represent it as
>
> /event/id/1/one/a/two/b
>
> or
>
> /event/id/1/rec-one/a/rec-two/b
>
> The former could be a problem as it may lead to ambiguities, unless
> you decided that sub-types' fields would have precedence?

To be honest I'm not sure. But if we use '/' as white space, and have
only left associativie combinators/constructors, with no variadic
arguments, the result should be unambiguous. It will be possibly
comprehendible (is it a word?) by humans for short urls.

I would use the constructors like:

/Event/id/1/Rec/one/a/two/b

This makes it unambiguous what we mean, in case we have the same field
names, but slightly more verbose.

/Event/1/Rec/a/b

would work as well, but you need the source or specs to read it



More information about the web-devel mailing list