I just began a project where I'm using Haskell's web framework Yesod. I am very impressed with it. Once I'm fluent in it, I'm not sure if there is any reason for me to go back to other web frameworks. The initial surprise came about when I was writing a HTML page using Yesod's DSL: hamlet. When typing in hamlet, I messed up the syntax (equivalent of forgetting to add a end tag in HTML). Since hamlet is integrated into Haskell as a quasiquoter, hamlet actually is converted to Haskell code at compile time. So, when I goofed the syntax, Yesod detected that I changed the file, attempted to re-compile, couldn't compile due to the problem, and I ended up getting a compile time error for what would essentially be a HTML syntax error. Pretty impressive stuff. I haven't seen any other web framework do this. Obviously Ruby on Rails and Django would not support this. But even C#'s MVC framework which has compile time type checking (well, the C# portion does), doesn't have this feature.

The benefits don't end there either. Even the routing file has a extremely simple DSL which allows for static type checking of URLs, to make sure you never start your Yesod project with a invalid route. Some people hate the use of these DSLs in Yesod, but I can't think of a single con, especially since these DSLs have a straightforward syntax.