Happen to find this [url=http://www.venge.net/graydon/talks/mkc/html/mgp00001.html]nice presentation[/url] on quickly developing static DSL in OCaml. Here, 'static' means the DSL is processed by a formal compiler as opposed to dynamic DSL such as the fancy metaprogramming in Ruby in runtime. I've been learning OCaml for a while and find it amazing for the elegance, speed and easiness to play with. It's also very good at writing compilers, which I've been long planning to learn thoroughly.