
Hello. haskellers and, specially, web developpers. This is the second version of MFlow, a deep-first effort in the development of a platform for web applications at the higher level, by including as much haskell magic as possible. It is at the same time experimental and intended to be used in industry. I believe that haskell will not have its chance in the Web if it does not bring unique advantages and challenging paradigms beyond speed and type safety. Deep-first means that the effort is more in the addition higher level features rather than in being complete and bug free, with the conviction that feedback from real usage at the highest level is the best guide for development. Rather than to mimic other platforms in other languages, MFlow is as Haskell'ish as possible, and introduces new approaches like statefulness, event sourcing, back-execution, composable, active, self contained widgets and persistent STM. All of them collaborate to create a high level environment for web programming. This release adds bidings for WAI, blaze-html, stateful AJAX, active widgets, requirements, content management, multilanguage and URLs to pages inside stateful procedures. The package: [http://hackage.haskell.org/package/MFlow The entry in my blog, with the announcement and the philosophy behind http://haskell-web.blogspot.com.es/2013/01/announce-mflow-02.html The same, in other words: http://haskell-web.blogspot.com.es/2012/12/on-spirit-of-mflow-anatomy-of-wid... An online example, with some links that explain the new features. http://81.169.134.95:8081 Stateful, but virtually stateless, thanks to event sourcing http://haskell-web.blogspot.com/2013/01/stateful-but-stateless-at-last-thank... Example of use of active widgets http://haskell-web.blogspot.com.es/2013/01/now-example-of-use-of-active-widg... Bug tracker https://github.com/agocorona/MFlow/issues Source repository git clone http://github.com/agocorona/MFlow Feedback is welcomed warmly Alberto.

Alberto G. Corona wrote:
Hello. haskellers and, specially, web developpers.
This is the second version of MFlow, a deep-first effort in the development of a platform for web applications at the higher level, by including as much haskell magic as possible. It is at the same time experimental and intended to be used in industry. I believe that haskell will not have its chance in the Web if it does not bring unique advantages and challenging paradigms beyond speed and type safety.
Deep-first means that the effort is more in the addition higher level features rather than in being complete and bug free, with the conviction that feedback from real usage at the highest level is the best guide for development.
Rather than to mimic other platforms in other languages, MFlow is as Haskell'ish as possible, and introduces new approaches like statefulness, event sourcing, back-execution, composable, active, self contained widgets and persistent STM. All of them collaborate to create a high level environment for web programming.
This release adds bidings for WAI, blaze-html, stateful AJAX, active widgets, requirements, content management, multilanguage and URLs to pages inside stateful procedures.
The package: [http://hackage.haskell.org/package/MFlow
The entry in my blog, with the announcement and the philosophy behind http://haskell-web.blogspot.com.es/2013/01/announce-mflow-02.html
For some reason, your blog posts are not displayed in my browser (Chrome). I block all cookies and I'm using adblock, though. Best regards, Heinrich Apfelmus -- http://apfelmus.nfshost.com

Heinrich Apfelmus
For some reason, your blog posts are not displayed in my browser (Chrome). I block all cookies and I'm using adblock, though.
Blogger.com blogs often need JavaScript to display anything at all. Greets, Ertugrul -- Not to be or to be and (not to be or to be and (not to be or to be and (not to be or to be and ... that is the list monad.

The blog has a dynamic template. and I´m afraid that it needs javascript.
Sorry.
I will paste the rest of the blog entry:
[Continue from the first message]
....
Statefulness means that the flow of execution is right in front of the eyes
of the programmer, rather that in the spaghetti code of the event-handling
model, the goto of the XXI century. it also means that the entire session
is in a procedure, so the session data need no trickery.
But, like in the stateless case, any page in the flow could have a direct
URL.http://haskell-web.blogspot.com/2013/01/stateful-but-stateless-at-last-thank...
[1]
Event sourcing in combination with statefulness means automatic logging of
all the events and automatic recovery of the execution state of the server
procedure and its data, thanks to the Workflow monad
transformerhttp://hackage.haskell.org/package/Workflow
[2].
So the server procedure can be stopped after timeout and restarted by the
application server when the user invokes it. The programmer can determine
the timeout and for how long the state is stored.
Back button management: the flow of execution can run
backhttp://haskell-web.blogspot.com.es/2012/03/failback-monad.html
when
the back button is pressed [3]. Thanks to a monad transformer. In
combination with event sourcing, this means automatic rollback of user
session data. So if the user want to undo his last item in the shopping
cart, he only has to press the back button.
User interface:
It is made of self contained pieces called widgets, made around the formlet
concept, so they compose gracefully with applicative operators and other
extra operators. A MFlow widget is more like the widgets of XWindows,
ASP.NET or JavaServer Faces: they have their own HTML formatting, their own
behaviours and interact with the server via AJAX, they execute actions when
activated and they return statically typed data. They declare their
required scripts, CSS links and server procedures in the form of
requirements to the requirement service. They include the server and client
code in the same piece of text. Being self contained and typed, they can be
shared and plugged with a minimum of configuration and instructions.
The URL links are also widgets or elements of widgets and return data to
the same flow, so no spaguetty event handling occur, unless the programmer
need out-of-flow links.
This versions http://haskell-web.blogspot.com.es/2013/01/now-example-of-use-of-active-widg...includes
some
active widgets with server-side controls for creating them [4].
Bindings:
wai-warp, blaze-html, xhtml, HSP, hack.
Persistence and transactions:
Global data can be transacted with any kind of persistence framework. MFlow
internally uses TCache [5], which provides with persistent STM references
(DBRefs). Their serialization can be configured. For rapid prototyping,
they have default persistence in files. Just add a Read-Show or a Binary
instance for your data and you can have a persistent, transactional DBRef
to it. Use them like you use TVars. TCache can index text and register
fields. It has a simple query language. Data can be accessed by key or by
any indexed field.
EXAMPLE:
The human mind learn by examples. There is a online
demohttp://haskell-web.blogspot.com.es/2013/01/online-example-of-mflow.html
for
some of the features that you can play with and you can download the code
[6]
[0] http://hackage.haskell.org/package/MFlow
[1]
http://haskell-web.blogspot.com/2013/01/stateful-but-stateless-at-last-thank...
[2] http://hackage.haskell.org/package/Workflow
[3] http://haskell-web.blogspot.com.es/2012/03/failback-monad.html
[4]
http://haskell-web.blogspot.com.es/2013/01/now-example-of-use-of-active-widg...
[5] http://hackage.haskell.org/package/TCache
[6] http://81.169.134.95:8081
2013/1/18 Ertugrul Söylemez
Heinrich Apfelmus
wrote: For some reason, your blog posts are not displayed in my browser (Chrome). I block all cookies and I'm using adblock, though.
Blogger.com blogs often need JavaScript to display anything at all.
Greets, Ertugrul
-- Not to be or to be and (not to be or to be and (not to be or to be and (not to be or to be and ... that is the list monad.
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
-- Alberto.
participants (3)
-
Alberto G. Corona
-
Ertugrul Söylemez
-
Heinrich Apfelmus