notes-tech-netCodingOld

More version control systems (also known as "revision control systems")

The ones that I still keep track of are listed on [Self-newsAndPredictions-netCoding]. Two others that I used to be considering but don't anymore are:

Haskell web programming frameworks

As of November '08.

HApps

I tried HApps, but it is not ready yet in my opinion; common tasks such as URL routing and template handling are insufficiently concise. I had to write a page of higher-level functions on top of what HApps provided to make these things concise. In addition, since it wants to keep all data in memory all the time, sharding will be required for big projects, but last I checked the sharding wasn't done yet.

WASH

I looked at WASH/CGI, and it looked great, but it looked like it wasn't extensible/overridable enough.

In the next two paragraphs, I speculate about things I don't understand -- they could be totally incorrect.

For example, it looked like WASH would try to prevent you from modifying the HTML in the forms it creates, or handling an incoming HTTP form submission, or directly interacting with the persistent values stored in user cookies.

I sense that this is a consequence of Haskell's type system; I think Haskell might make it easy for you to write an intelligent, high-level DSL-like library to encapsulate some set of tasks, but maybe Haskell makes it hard for you to do this while at the same time allow the client to override or extend parts of your library in a piecewise or one-off manner. For example, in an object-oriented language, here is how you could usually tweak generated form HTML provided by a web framework. The form generation code would probably be a method in some object class, and that method would probably return HTML. So the client would subclass that class, override the relevant method, and make a new method which calls the superclass and then makes whatever modifications it wants to the form. In WASH, however, the library API only exposes the WithHtml? type, which is isn't an HTML string, it's opaque. The connection between the WithHTML? type and actual HTTP requests is abstracted away, so you can't interfere with the rendering of a WithHTML? to actual HTML. Of course other Haskell frameworks exist which don't make HTML rendering opaque, but the charm of WASH is that it does abstract that away -- it seems like it would be hard for Haskell to allow a library to say, "For 99% of your program, pretend that WithHTML? is all there is, but then if you want to override the HTML rendering every now and then, you can do that too". It seems to me that in order to allow the rendering to be overriden sometimes, you'd want to parameterize the WithHTML? typeclass with some parameter that allows you to choose your renderer, or something like that, which would clutter up the code everywhere.