Web/Comparison of Happstack, Snap and Yesod: Difference between revisions
(→Yesod: More use cases.) |
(→Happstack: Added happstack use cases.) |
||
Line 41: | Line 41: | ||
* [http://cogracenotes.wordpress.com/2010/08/08/hackage-on-sparky/ Matt Gruen] used Happstack to create Hackage 2.0. | * [http://cogracenotes.wordpress.com/2010/08/08/hackage-on-sparky/ Matt Gruen] used Happstack to create Hackage 2.0. | ||
* [http://happstack.com/index.html The Happstack homepage] is written with Happstack. | * [http://happstack.com/index.html The Happstack homepage] is written with Happstack. | ||
* [http://www.creativeprompts.com/ Creative Prompts] — A site for exchanging story ideas -- which was developed but never got around to promoting. | |||
* [http://www.seereason.com See Reason] — A site which allows you to construct and prove arguments using first order logic. This site is in public beta. | |||
* [http://src.seereason.com/examples/happstack-imageboard/ A (4chan clone) image board] (not running anywhere). | |||
=== Snap === | === Snap === |
Revision as of 20:51, 11 January 2012
Still fixing the formatting broken stuff from conversion to wiki from markdown. I will outline planned sections in headings momentarily.
There is no existing complete comparison of Happstack, Snap and Yesod. Such a thing helps people to choose and feel they've made a well-founded decision.
The home page
I'll start with the web sites at first impression.
- Happstack's web site is simple and clean.
- Snap's web site is pretty and professionally designed.
- Yesod's web site is okay, good links.
Maintainers
Next, the main maintainers of the projects is handy to know:
- Happstack — There is no link on the homepage about maintainers, but I garnered Jeremy Shaw, (Figured out from here, “Maintainer of Happstack, the Haskell web application framework: <http://www.happstack.com/>”) aka stepcut. I can't tell if there are any more maintainers, the darcs history doesn't show any major contributors. A list of contributors, I suppose, can be seen on the patch-tag homepage, I'm not going to bother trying to convert usernames to real names. (Lemmih, Saizan, alexjacobson, creighton, mightybyte, stepcut, tphyahoo.)
- Snap — Many are listed as ‘contributors’ on the about page, but Gregory Collins and Doug Beardsley are certainly maintainers, the rest I'm not sure, may be just contributors; (Shu-yu Guo, James Sanders, Carl Howells, Shane O'Brien, Ozgun Ataman, Chris Smith, Jurriën Stutterheim.) the site doesn't distinguish.
- Yesod — Michael Snoyman, Greg Weber, (Garnered from the contributors page, via Community.) there are other contributors listed, some of which might be maintainers. (Felipe Lessa, Patrick Brisbin, Luite Stegeman, Hiromi ISHII, Kazu Yamamoto. See the page for past contributors.)
Communities
- Happstack — Garnered from the Community page, the HappS mailing list, #happs on Freenode IRC, with IRC logs, Google Code for issue tracking, a wiki, Twitter, a Facebook group.
- Snap — Garnered from the About page, the Snap mailing list #snapframework on Freenode IRC, Github for issue tracking.
- Yesod — Garnered from the Community Resources, StackOverflow, a Google Group, the web-devel mailing list, (Which, due to the large proportion of Yesod-related questions, has essentially become ‘yesod-devel’.) #yesod on Freenode IRC, Github for issue tracking, a wiki for posting documentation.
Documentation
There is roughly the same set of documentation for each, varying in side and detail, with a quickstart for each, more complete tutorials, and haddock API documentation.
- Happstack — A small tutorial covering writing a simple program, a larger crash course cover routing, templating, request handling, static files and database state, and examples. And haddock docs.
- Snap — A simple quickstart guide, a slightly larger tutorial similar to happstack's, a tutorial on snaplets (Snap's means of extension), a tutorial on heist (Snap's templating) and haddock docs.
- Yesod — a simple quickstart guide similar to Snap's, screencasts, an online book similar to Happstack's crash course, covering templates, widgets, routing, forms, sessions, databases, deployment, authentication, scaffolding, internationalisation, and examples. And haddock docs.
Use Cases
It's interesting to know who is using these frameworks.
Happstack
- Matt Gruen used Happstack to create Hackage 2.0.
- The Happstack homepage is written with Happstack.
- Creative Prompts — A site for exchanging story ideas -- which was developed but never got around to promoting.
- See Reason — A site which allows you to construct and prove arguments using first order logic. This site is in public beta.
- A (4chan clone) image board (not running anywhere).
Snap
Not found any yet.
- hpaste is written with Snap but that's my own so it doesn't count.
Yesod
- Haskellers uses Yesod: https://github.com/snoyberg/haskellers
- Braden Shepherdson made an AJAX chat application using Yesod.
- Björn Buckwalter made a URL shortener using Yesod.
Massive Tactical
Massive Tactical are using Yesod, but their web site is down, so it's hard to learn anything from that. However, the testimonial by Simon Cheung is interesting:
In the beginning, I found Hamlet and Cassius to be quite strange. After some time I found it a lot easier to use. The Hamlet makes rapid design easier: less typing and no worrying about tag mismatches. It was also really good to only have to do something once with widgets!
It took me a bit longer to get to grips with haskell: when I get told that "customers is a [(CustomerId, Maybe Customer)]" it took me a while to work out what to do with it :) After I'd learned basics it became a lot easier and my work was a lot simpler.
Working at Massive started off quite scary: totally different development than what Im used to! After having worked on two projects using Yesod I will wish they are all this easy!
Hachicode is using Yesod, quoth “Nubis”, presumbly a developer:
Between our server and client we use C, C++, Java, Objective-C, Javascript and Haskell. We've got weird runtime errors and sometimes even race conditions in all of them except Haskell. Yesod is clearly far behind rails and django in terms of convenience, but already has a much stronger foundation and the potential to catch up quick without giving that up.
Repositories and Installation
I am running Ubuntu 10.04.
Happstack
Installed from the happstack package from Hackage, or can be retrieved via the patch-tag Darcs repository. Info from the Download page.
$ ghc --version The Glorious Glasgow Haskell Compilation System, version 6.12.3 $ cabal --version cabal-install version 0.10.2 using version 1.10.2.0 of the Cabal library $ cabal-dev install happstack … Registering happstack-6.0.5... real 2m13.240s user 1m38.886s sys 0m7.588s
Installs fine in GHC 6.12.3 in a couple of minutes.
Snap
The web site Download page advises to install the snap package from Hackage:
$ ghc --version The Glorious Glasgow Haskell Compilation System, version 6.12.3 $ cabal --version cabal-install version 0.10.2 using version 1.10.2.0 of the Cabal library $ cabal-dev install snap … Registering snap-0.7... real 5m1.105s user 4m24.369s sys 0m15.389s
Installs fine in GHC 6.12.3 in a couple of minutes.
Yesod
The web site advises to install the yesod package from Hackage.
$ ghc --version The Glorious Glasgow Haskell Compilation System, version 6.12.3 $ cabal --version cabal-install version 0.10.2 using version 1.10.2.0 of the Cabal library $ time cabal-dev install yesod Resolving dependencies... cabal: cannot configure conduit-0.0.1.1. It requires base >=4.3 && <5 For the dependency on base >=4.3 && <5 there are these packages: base-4.3.0.0, base-4.3.1.0, base-4.4.0.0 and base-4.4.1.0. However none of them are available.
This was anticipated in the documentation, (“If you want to install yesod painlessly, get ghc >= 7.” from the install help wiki page. ) so the behaviour is expected.
chris@cn-done:~/yesod$ export PATH=/opt/ghc/7.0.4/bin/:$PATH chris@cn-done:~/yesod$ ghc --version The Glorious Glasgow Haskell Compilation System, version 7.0.4 chris@cn-done:~/yesod$ cabal install Cabal cabal-install --bindir=/opt/ghc/7.0.4/bin … Linking dist/build/cabal/cabal ... Installing executable(s) in /opt/ghc/7.0.4/bin chris@cn-done:~/yesod$ cabal --version cabal-install version 0.10.2 using version 1.10.2.0 of the Cabal library
So I'm now on 7.0.4 with the latest cabal installed for 7.0.4. Proceeding should work:
$ time cabal-dev install yesod … Registering yesod-0.9.4.1... real 8m55.781s user 7m2.446s sys 0m21.809s
Installs with no problems as the guide suggests.