[Haskell-cafe] ANNOUNCE: MFlow 3.0
Alberto G. Corona
agocorona at gmail.com
Wed Jul 10 00:41:59 CEST 2013
The third version of MFlow is out.
MFlow is an all-heterodox web application framework, but very haskellish.
Now MFlow support restful URLs. It is the first stateful web framework to
my knowledge that supports it. The type safe routes are implicitly
expressed as normal monadic code within a navigation monad. The application
look as a normal imperative console application, but the navigation monad
goes back and forth to match the path of the URL. The user has control of
the state, that can roll-back or not when the navigation goes back
depending on the application needs. The state is in the form of normal
Haskell variables In a monadic computation, with the weird addition of
The menu of the application below is implemented as an imperative-like
syntax, but the application navigate forward and backward to synchronize
with the requests of the web browser:
This version support in-page flows.
What is that? look at this example:
These flows are implemented as formlets with a monad instance, and
callbacks which change the look. I call them "widgets":
Each page may have many of these active widgets, each one running their
own flow. These widgets refresh themselves trough Ajax if they are enclosed
available, they gracefully degrade by refreshing the entire page:
The page flows and the multiflow idea was inspired in
a great Smalltalk web framework and adapted to the pure recursive nature of
Haskell and the formlets.
It also support some JQuery widgets integrated: modal and not modal
dialogs, datePicker and other active widgets that handle other widgets.
It also support the older features: persistent state, WAI, blaze-html and
others integration, server process timeouts, Ajax, requirements,
content management, caching of widget rendering and all the other previous
I wish to thank some people for their feedback. Specially Adrian May for
his feedback and interest
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Haskell-Cafe