Yesod 0.5.0 (August 29, 2010)
Forms no longer have special types for special views; instead, there is a toFormField attribute when declaring entities to specify a form rendering function.
You can explicitly specify the id and name attributes to be used in forms if you like. When omitted, a unique name is automatically generated.
The isAuthorized function now takes a function specifying whether the request is a write request. This should make it simpler to develop read/write authorization systems. Bonus points: if you use HTTP request methods properly, the isWriteRequest function will automatically determine whether a request is a read or write request.
You can now specify splitPath and joinPath functions yourself. Previously, the built-in versions had very specific URL rules, such as enforcing a trailing slash. If you want something more flexible, you can override these functions.
Static files served from the static subsite can have a hash string added to the query string; this is done automatically when using the getStaticFiles function. This allows you to set your expires headers far in the future.
A new Yesod.Mail module provides datatypes and functions for creating multipart MIME email messages and sending them via the sendmail executable. Since these functions generate lazy bytestrings, you can use any delivery mechanism you want.
Change the type of defaultLayout to use Widgets instead of PageContent. This makes it easier to avoid double-including scripts and stylesheets.
Major reworking of the Auth subsite to make it easier to use.
Update of the site scaffolder to include much more functionality. Also removed the Handler type alias from the library, as the scaffolder now provides that.
New in Yesod 0.4.0
A big thanks on this release to Simon Michael, who pointed out a number of places where the docs were unclear, the API was unintuitive, or the names were inconsistent.
Added the yesod executable which performs basic scaffolding.
Cleaned up a bunch of API function names for consistency. For example, Yesod.Request now has a logical lookupGetName, lookupPostName, etc naming scheme.
Changed the type of basicHandler to require less typing, and added basicHandler' which allows you to modify the line output to STDOUT (or skip it altogether).
Switched the Handler monad from ContT to MEitherT (provided by the neither package). ContT does not have a valid MonadCatchIO instance, which is used for the sqlite persitent backend.
Facebook support in the Auth helper.
Ensure that HTTP request methods are given in ALL CAPS.
Cleaned up signatures of many methods in the Yesod typeclass. In particular, due to changes in web-routes-quasi, many of those functions can now live in the Handler monad, making it easier to use standard functions on them.
The static file helper now has extensible file-extension-to-mimetype mappings.
Added the sendResponse function for handler short-circuiting.
Renamed Routes to Route.