I was planning on writing a blog post called &quot;call to arms,&quot; which would have been something similar to what you said. I agree that there is far too much fragmentation in the community; I debated starting Yesod at all when there were already a number of frameworks out there (Happs, KIbro, Turbinado). However, none of them hit the spot that I was aiming for, so I created it.<div>
<br></div><div>At the same time, Jinjing came out with Hack, and I tried to go with that. Unfortunately, there are some inherent flaws with Hack (you can review the Hack-discuss mailing list to see some discussions over there), so I started WAI. So it would seem that so far, I&#39;ve done more fragmentation than consolidation :(.</div>
<div><br></div><div>On the other hard, the other frameworks having had much development, Yesod is still active, and it looks like Happstack will be joining WAI, so not all is lost. I am very interested in trying to continue consolidation, but I think aiming for the One True Haskell Framework is a bad idea. Python- the community known for One Way To Do It- can&#39;t even consolidate around a single framework, so Haskell- the language of We Can All Write A Monad Transformers Library- doesn&#39;t stand a chance.</div>
<div><br></div><div>So where can we consolidate? On libraries. I have purposely released a number of the components of Yesod as separate libraries that are available to any framework author (or even someone *not* using a framework). Here are some in particular to look at:</div>
<div><br></div><div>wai</div><div>wai-extra</div><div>web-encodings</div><div>clientsession</div><div>authenticate</div><div>data-object, data-object-json and data-object-yaml</div><div>failure and control-monad-failure</div>
<div>hack-handler-webkit</div><div><br></div><div>Some of these packages have very obvious room for future development, and if someone (like Gour) is looking for somewhere to start contributing to the Haskell web community, I would recommend one of the following:</div>
<div><br></div><div><br></div><div>authenticate currently supports OpenId 1 and RPXnow. I would like to have authenticate itself support *all* sites that RPXnow does. The first step in that process would be to get authenticate to use the openid package and determine whether a server support openid 1 or 2. From there, Twitter, Facebook, Windows Live support would all be nice.</div>
<div><br></div><div><br></div><div>hack-handler-webkit is, IMO, a really cool idea. It allows you to convert any Hack application into a desktop app. It runs simpleserver and then opens up a Webkit window that connects to it. This is much better than simply running the simpleserver and then opening up a webbrowser, because:</div>
<div><br></div><div>1) The program terminates automatically when the web browser closes.</div><div>2) You can control menu bars, title bar, etc completely, making it *feel* like a desktop app.</div><div>3) You can ensure that all of the functionality you want is present in webkit.</div>
<div><br></div><div>Unfortunately, hack-handler-webkit has two problems:</div><div><br></div><div>1) It&#39;s written for hack instead of WAI. However, this should take all of 5 minutes to fix.</div><div>2) It only works on Linux, and even there I don&#39;t have any documentation on setting it up.</div>
<div><br></div><div><br></div><div>Yesod is still missing a model layer. This is a project that I will most likely be doing myself, since it will need to be designed to integrate very closely with Yesod, but I&#39;ll mention some of the design ideas here. (By the way, Chris Eidhof has a package on Github called Basil which looks very interesting here.)</div>
<div><br></div><div>1) I want to use YAML quasi-quoting to define the models.</div><div>2) I don&#39;t want a super-complex &quot;object relational mapping&quot;; Haskell is already much closer to the relational level than an OO language.</div>
<div>3) Utilize IO thunks (ie, lazy IO loading) so that we don&#39;t need to load everything into memory at the beginning.</div><div>4) Not tied down to SQL *or* in-memory databases. It should support both of those, but *also* support a system that is usable even in a CGI setup. I&#39;m contemplating now a database that uses multiple directories/files and uses append-only to avoid concurrency issues.</div>
<div><br></div><div><br></div><div>Compile-time checking of templates would be great. The Bravo package looks interesting, but I&#39;m a little dubious about the approach used. I think something based on typeclasses might be a bit more nimble. Once again, tight integration with the model system I theoretically design would be nice.</div>
<div><br></div><div><br></div><div>So, in summary of a much-too-long e-mail, let&#39;s not bother trying to get everyone to agree on One Framework. Happs has its place, Yesod has its place, and I know others are using Loli and probably Kibro. (I&#39;m not sure if anyone every got started with Turbinado.) However, we can raise the bar for *all* packages simultaneously by making a more solid ecosystem of Haskell web packages available that any framework can cherry-pick from.</div>
<div><br></div><div>Michael</div>