Difference between revisions of "Web"

From HaskellWiki
Jump to navigation Jump to search
m (Added some package stubs.)
(finish merging to Web/Frameworks and Web/Deploy)
 
(27 intermediate revisions by 8 users not shown)
Line 1: Line 1:
[[Category:Web]]
+
[[Category:Web|*]]
  +
{{Web infobox}}
 
== Libraries ==
 
   
 
The web development community in Haskell has recently had a large boost in activity, resulting in a plethora of choices in libraries. As usual, a breadth of options is a double edged sword: you can choose the tools more to your style, but it is harder to find quality tools.
 
The web development community in Haskell has recently had a large boost in activity, resulting in a plethora of choices in libraries. As usual, a breadth of options is a double edged sword: you can choose the tools more to your style, but it is harder to find quality tools.
   
  +
You may want to start on this wiki by looking at [[Web/Frameworks]].
This document is meant to be an up-to-date listing of different libraries available to perform various tasks related to web development. We want to strike a balance here between enough information to make an informed decision, while keeping a good signal-to-noise ratio. As such, for editors, please try to include the following information on each library:
 
 
* Name
 
* Most recent version, and release date
 
* Link to the code (either Hackage, or elsewhere if not on Hackage)
 
* A short summary of what the library does. In particular, ''what makes this library different than others''
 
* Links to more documentation. If there are lots of links, consider creating a separate Wiki page for those links, so as not to clutter this page.
 
* Links to sample code. Both short snippets and full-scale applications are welcome. Again, create a separate Wiki page as necessary.
 
* Dependencies on other packages. For example, a web framework should list its choice of templating system, server, etc.
 
 
 
=== Interfaces ===
 
 
Interfaces provide an abstraction between servers and applications, allowing different servers to be swapped easily.
 
 
==== Hack ====
 
 
Current version: [http://hackage.haskell.org/package/hack Hack 2009.10.30]. Released: October 30, 2009.
 
 
Hack is a simple interface for applications. Based on Ruby's Rack, it presents a very low barrier to entry. Unlike WAI, it uses lazy bytestrings for request and response bodies, making it easier to use for some. Many backends are available, for numerous backends; simply search hackage for "hack-handler-".
 
 
Samples: None.
 
 
Dependencies: None.
 
 
==== WAI (Web Application Interface) ====
 
 
Current version: [http://hackage.haskell.org/package/wai WAI 0.1.0]. Released: May 21, 2010.
 
 
The WAI is designed to be a type-safe and performant interface. Type safety is achieved by having data types such as RequestHeader, ResponseHeader, HttpVersion, as opposed to simply using Strings or ByteStrings. Performance is achieved by using an enumerator interface, allowing constant-space response construction without needing lazy I/O. Backends available are currently a simple server, CGI and FastCGI. There is also a Snap Framework backend in the works, waiting on some API changes in Snap.
 
 
Samples: [http://github.com/snoyberg/wai/blob/master/README.lhs Basic sample application]
 
 
Dependencies: None
 
 
=== Servers ===
 
 
TODO: Information on Happstack, Snap, others.
 
 
=== Templating ===
 
 
==== Hamlet ====
 
 
Current version: [http://hackage.haskell.org/package/hamlet Hamlet 0.3.1]. Released: June 21, 2010
 
 
Hamlet's main goal is to provide you with fully type-safe templates. It uses Haskell's quasi-quoting facilities so that everything is checked at compile time. Unlike using an HTML combinator library, it uses a more intuitive syntax for defining your templates: a Haml-inspired syntax to be precise. It also has support for type-safe URLs, and achieves very high performance by being based on BlazeHtml and performing compile-time optmizations.
 
 
[http://docs.yesodweb.com/hamlet/ Documentation]. [http://docs.yesodweb.com/hamlet/synopsis.html Sample]. Dependencies: BlazeHtml.
 
 
==== HStringTemplate ====
 
 
Current version: [http://hackage.haskell.org/package/HStringTemplate HStringTemplate 0.6.3]. Released: May 22, 2010.
 
 
See the [[HStringTemplate]] wiki page.
 
 
==== TODO ====
 
 
HSP, Heist
 
 
=== Persistence ===
 
 
==== Persistent ====
 
 
Current version [http://hackage.haskell.org/package/persistent Persistent 0.0.0]. Released: June 22, 2010.
 
 
Persistent is a high-level, non-relational, type-safe persistence layer for Haskell. Its design allows it to be used on both SQL and non-SQL backends. Heavy usage of type families allows strong type guarantees, while usage of template haskell removes the need for boilerplate coding.
 
 
[http://docs.yesodweb.com/persistent/ Documentation]. [http://docs.yesodweb.com/persistent/synopsis.html Sample]. Dependencies: Hamlet and web-routes-quasi (only for convenience instances).
 
 
=== Frameworks ===
 
 
==== Yesod ====
 
 
Current version [http://hackage.haskell.org/package/yesod Yesod 0.3.0]. Released: June 22, 2010.
 
 
Yesod is designed for RESTful, type-safe, performant web apps. By leveraging quasi-quotation for the more boilerplate tasks, we get concise web apps with high levels of type safety. Its Hamlet templates are compile-time checked for correctness, and the controller (web-routes-quasi) uses type-safe URLs to make certain you are only generating valid URLs. It loosely follows Model/View/Controller principles.
 
 
[http://docs.yesodweb.com/yesod/ Documentation]. [http://docs.yesodweb.com/yesod/helloworld.html Hello world sample] ([http://www.youtube.com/watch?v=BEWJnDgrmp0 screencast]). [http://github.com/snoyberg/bloggy bloggy blog engine]. Dependencies: Persistent (model), Hamlet (view), web-routes-quasi (controller), clientsession, authenticate.
 
 
==== Snap ====
 
 
TODO: Expand. See homepage: http://snapframework.com/
 
 
==== Happstack ====
 
 
TODO: Expand. See homepage: http://happstack.com/index.html
 
 
=== Miscellaneous ===
 
 
==== clientsession ====
 
 
Current version [http://hackage.haskell.org/package/clientsession clientsession 0.4.0.1]. Released: May 24, 2010.
 
 
clientsession encrypts and hashes data so it can be stored in a cookie safely. This allows you to have very scalable user sessions: you can use multiple servers, and they need only share the encryption key.
 
 
Documentation: [http://hackage.haskell.org/packages/archive/clientsession/0.4.0.1/doc/html/Web-ClientSession.html haddocks]. No samples or dependencies.
 
 
==== authenticate ====
 
 
Current version [http://hackage.haskell.org/package/authenticate authenticate 0.6.2]. Released: May 13, 2010.
 
 
A library for allowing third-party logins to your sites. Currently supports openid version 1 and rpxnow.
 
 
Documentation: [http://hackage.haskell.org/package/authenticate haddocks]. No samples or dependencies.
 
 
== Old Content ==
 
=== Wiki pages ===
 
 
* [[Applications and libraries/Web programming]]
 
* [[Practical web programming in Haskell]]
 
* [[Blog articles/Web]]
 
* [[Web Projects]]
 
 
 
=== External links ===
 
   
  +
Please join us on [[Web/Forums_and_Discussion|the mailing lists]] to discuss web development in Haskell.
* [http://www.haskell.org/mailman/listinfo/web-devel The Haskell Web development mailinglist]
 

Latest revision as of 20:04, 17 February 2011

Haskell Web Development

Software:
Servers - Libraries - Frameworks
Deploy - Cloud
Interfaces to frameworks
Databases and Persistence
Testing and Verification
Content Management

Community & Research:
Forums and Discussion
Literature (research, talks and blogs)
Existing Haskell web applications
Ongoing projects and ideas

The web development community in Haskell has recently had a large boost in activity, resulting in a plethora of choices in libraries. As usual, a breadth of options is a double edged sword: you can choose the tools more to your style, but it is harder to find quality tools.

You may want to start on this wiki by looking at Web/Frameworks.

Please join us on the mailing lists to discuss web development in Haskell.