[Ur] Blog post

Adam Chlipala adamc at impredicative.com
Thu May 12 17:37:03 EDT 2011


David Snider wrote:
> http://www.davidsnider.net/2011/05/10/drupal-style-themes-with-urweb/
>
> Any thoughts would be appreciated.

My initial plan was to respond in a comment to your blog post, but I 
haven't been able to figure out how to do that, since you are requiring 
an account with your blog for comment posting, but I see no form for 
creating an account.

So, here's my response:

> I'm wondering if there is a way to make it so that when theme.urp 
> changes the site will recompile and /safely/ (as in, without 
> interrupting active user sessions) replace the old process with the 
> new one. Or, at least cleanly do it by informing the user that the 
> site has been updated and their old session is no longer valid.

It would be easy to do a seamless replace using a proxy that holds all 
connections while the old server process is closing and the new one 
starting.  I don't understand the focus on "safely" for a graphical 
theme.  All old URLs and so forth should just keep working; pages will 
just look different.

> One of the thoughts I've heard is wrapping the entire site in a 
> functor and passing each of these rendering modules in explicitly as 
> parameters.

Yes, that's what I assumed you were doing before I read the code!  IMO, 
that is a much cleaner approach (though I don't see a reason for giving 
each rendering function its own module; that just seems to bloat the 
interface).

> I like the sound of this idea but I'm not quite sure how to do it. 
> Part of the problem I'm having is declaring signatures for the HTML 
> that is supposed to be returned. If you explicitly define one then 
> won't the designer get locked into a certain rendering style?

I don't understand this question.  The whole point of modularity is to 
use well-defined interfaces.  Are you expressing doubt that you could 
write an interface that wouldn't leak too many implementation details?  
Given the code you have now, I wouldn't expect that to happen.

> Can a functor declare a return type of "let the compiler infer it"? 
> I'm guessing it can.

Yes, every declaration has a most general type/signature inferred for it 
by default.  Signatures can abstract these most general types and 
signatures, but you can always avoid that for a functor by, say, putting 
it in a .ur file by itself and creating no corresponding .urs file.

> (Side Note: I also put all the database definitions into one module. 
> Is there any reason for not doing it this way?)

By doing this, you lose out on all opportunities for encapsulation.  For 
instance, with your current code, you must worry that any theme could 
read and write the users table.  That would be provably impossible if 
you made the users table private to the authentication module.



More information about the Ur mailing list