Clojure has "Web Development with Clojure" which is basically what I listed above, except for Clojure rather than Haskell.
I may write up a blogpost on getting this far. It's mostly based on this: https://www.fpcomplete.com/school/starting-with-haskell/libr... . I didn't do much beyond figure out explictly using L.fromStrict to deal with conflicting interpretations of overloaded-strings and figuring out how where to put my fillDB and getComments functions in main. I initially tried to call these within the scotty monad, but I think doing it that way would have required learning about monad transformers.
I'm hoping to eventually turn this into a simple disqus alternative that should be lightweight and easy to distribute as a binary.
Although it uses virthualenv instead of a cabal sandbox.
end result here, which I think should serve as a good starter point for developing with Scotty:
https://github.com/chrissrogers/chrissrogers.com
For Heroku builds I used the following excellent buildpack
but it seems well written if you can get past that point. Most beginners won't though.
I personally don't understand the draw of scotty because as soon as you want to start doing more substantial web development, you're going to want higher level abstractions. The Snap Framework adds to this in a pretty flexible and not-too-opinionated way with snaplets which are implemented in the snap package. The snap package also contains a few core snaplets that almost every application will want out of the box like sessions, auth, and a snaplet for Heist templating. The Heist part is the only place where the snap package gets opinionated. But you are definitely not locked into using Heist. You could very easily use Yesod's Hamlet, HStringTemplate, hastache, or anything else. Heist just happens to be the direction that the core Snap developers seem to prefer.
Abstractions in Haskell are smaller, more universal and composable than those of say ruby or python. For example the very simple idea of a Monoid (essentially concatenation) can be found in most places either explicitly or if you squint a bit, and once you recognise it a whole set of properties and behaviours can be reused.
Also once the structure is in place, they types make for very safe re-factoring and assurance that you haven't broken anything.
The only thing that's probably slower than ruby in Haskell is, unfortunately, learning it in the first place :-)
[1] http://snapframework.com/faq#is-anyone-using-snap-in-product...
I have a plugin for Sublime that complains when something is broken, or a dependency is missing. The typesystem is so strong that usually when it compiles, it works.
So my process for refactoring is basically changing typesystems, and having the compiler check my changes until it works again.
Note that this thinks of Ruby as bad only in IDE aspect. Refactoring Ruby is actually quite enjoyable as Ruby is so friendly to unit testing. You just move your code and run your tests again.
https://github.com/yesodweb/yesod-scaffold/tree/postgres-fay
It's not quite Meteor (then I dont believe it is so great), but works today and gives you Haskell from front-to-back.
The Haskell Center IDE of FPComplete is build with Yesod and Fay -- and that is a serious application.
I used it for a personal project of mine, which is creating an rss reader resembling the now dead iGoogle (which I loved), and although I had to read a lot of source code to get it to work, I really enjoyed how I worked with it, after figuring out the patterns on how to use it.
It definitely isn't finished, it could use some love by some eager developers, but in my opinion it has the potential to be the best framework out there.
- It extends scotty, so defining routes and control logic is fast and simple - It does not cage you in with a template language, or libraries that you don't want thrown in your face.
For example, I used Scotty with my own templating language I made for fun (hemplate), as well as a validation library I made, which I hope to finish in the near future, (after I get a job).