[Haskell-cafe] ANNOUNCE: MFlow 3.0

Alberto G. Corona agocorona at gmail.com
Sat Jul 13 15:05:15 CEST 2013


However, besides state synchronization is under development, state
persistence in MFlow is optional,  by using  the workflow monad instead of
the IO monad.  See for example this:

http://mflowdemo.herokuapp.com/shop



2013/7/10 Alberto G. Corona <agocorona at gmail.com>

> My plan is to synchronize MFlow servers using cloud Haskell since the
> state serialization is small. I´m working on it.  However continuation
> based frameworks can not synchronize state.  There is "swarm" in scala that
> generate portable continuations but this is not used in the context of web
> application since the state in a continuation is big and can not be
> synchronized fast enough. In other languages these states are not even
> portable between machines.
>
>
> 2013/7/10 Alexander Kjeldaas <alexander.kjeldaas at gmail.com>
>
>> Here are some common-lisp web frameworks using continuations:
>>
>> http://common-lisp.net/project/cl-weblocks/
>> http://common-lisp.net/project/ucw/features.html
>>
>> What always worried me with these frameworks is how they could be made
>> robust in case of failures.  Storing all state in a database backend often
>> makes it possible to isolate failures.  However, it seems to me that it is
>> be possible to solve this in Haskell where state can be serialized and
>> synchronized between multiple machines using Cloud Haskell, something that
>> is error-prone or impossible in other languages.  But that step has never
>> been taken.
>>
>> Alexander
>>
>>
>> On Wed, Jul 10, 2013 at 4:48 PM, Alberto G. Corona <agocorona at gmail.com>wrote:
>>
>>> Thanks Adrian. The racket people where pioneers in this idea I think.
>>>
>>> There is another web framework in Ocaml, Osigen that it is also
>>> continuation based. MFlow is not continuation-based but it also define the
>>> navigation as a sequence. But only Seaside (and now MFlow) supports many
>>> flows in the same page. See for example this:
>>>
>>> [PDF] *Seaside* – A *Multiple* Control *Flow* Web Application Framework<http://www.google.es/url?sa=t&rct=j&q=&esrc=s&frm=1&source=web&cd=3&cad=rja&ved=0CEwQFjAC&url=http%3A%2F%2Fscg.unibe.ch%2Farchive%2Fpapers%2FDuca04eSeaside.pdf&ei=WnPdUYHPI-Ly7Aaa0oHQDA&usg=AFQjCNFxwsFQc9QsQCNPRFfD4t6ReQtP5g&sig2=_klwtzxIKW5UzAOUDOvFCw>
>>>
>>> There is also other: Apache Coccoon that run in a special kind of
>>> JavaScript. The continuation-based frameworks have the reputation of
>>> storing a lot of application state and to be non  scalable. MFlow
>>> uses backtracking and It does not have these problems.
>>>
>>>
>>> 2013/7/10 Adrian May <adrian.alexander.may at gmail.com>
>>>
>>>> Oh how nice!
>>>>
>>>> I have been looking at MFlow a lot lately and I think it's got
>>>> something quite special that Yesod, Happstack, etc don't seem to have, at
>>>> least, not as far as I know. I mean, look at this:
>>>>
>>>> sumWidget= pageFlow "sum" $ do
>>>>
>>>>       n1 <- p << "Enter first number"  ++> getInt Nothing <** submitButton "enter" <++ br
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>       n2 <- p << "Enter second number" ++> getInt Nothing <** submitButton "enter" <++ br
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>       n3 <- p << "Enter third number"  ++> getInt Nothing <** submitButton "enter" <++ br
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>       p <<  ("The result is: "++show (n1 + n2 + n3))  ++>  wlink () << b << " menu"
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>       <++ p << "you can change the numbers in the boxes to see how the result changes"
>>>>
>>>> Is that pretty or what? That's the code for this:
>>>>
>>>> http://mflowdemo.herokuapp.com/noscript/fviewmonad
>>>>
>>>> To me that's a real technological step over and above the usual
>>>> servlets paradigm and I'd love to see more people getting involved. It
>>>> seems like Yesod and Happstack have a lot more manpower behind them, but
>>>> unless I've missed something, MFlow is going somewhere new and should be
>>>> helped along.
>>>>
>>>> Adrian.
>>>>
>>>> PS. Besides Seaside, Racket is playing with the same ideas. They (Jay
>>>> McCarthy) have something to say about performance but I didn't quite
>>>> understand it.
>>>>
>>>>
>>>>
>>>> On 10 July 2013 06:41, Alberto G. Corona <agocorona at gmail.com> wrote:
>>>>
>>>>> The third version of MFlow is out.
>>>>>
>>>>> http://hackage.haskell.org/package/MFlow
>>>>>
>>>>> 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 backtracking.
>>>>>
>>>>> 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:
>>>>> http://mflowdemo.herokuapp.com/
>>>>>
>>>>> This version support  in-page flows.
>>>>>  What is that? look at this example:
>>>>>
>>>>> http://mflowdemo.herokuapp.com/noscript/fviewmonad
>>>>>
>>>>> These flows are implemented as formlets with a monad instance, and
>>>>> callbacks which change the look. I call them "widgets":
>>>>>
>>>>>
>>>>> http://haskell-web.blogspot.com.es/2013/06/the-promising-land-of-monadic-formlets.html
>>>>>
>>>>>
>>>>> 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 in the primitive "autoRefresh". If there is no Ajax or JavaScript
>>>>> available, they gracefully degrade by refreshing the entire page:
>>>>>
>>>>> http://mflowdemo.herokuapp.com/noscript/combination
>>>>>
>>>>>
>>>>> http://haskell-web.blogspot.com.es/2013/06/and-finally-widget-auto-refreshing.html
>>>>>
>>>>> The page flows and the multiflow idea was inspired in Seaside<http://www.seaside.st/>,
>>>>> 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 stuff.
>>>>>
>>>>> I wish to thank some people for their feedback. Specially Adrian May
>>>>> for his feedback and interest
>>>>>
>>>>>
>>>>> --
>>>>> Alberto.
>>>>>
>>>>> _______________________________________________
>>>>> Haskell-Cafe mailing list
>>>>> Haskell-Cafe at haskell.org
>>>>> http://www.haskell.org/mailman/listinfo/haskell-cafe
>>>>>
>>>>>
>>>>
>>>> _______________________________________________
>>>> Haskell-Cafe mailing list
>>>> Haskell-Cafe at haskell.org
>>>> http://www.haskell.org/mailman/listinfo/haskell-cafe
>>>>
>>>>
>>>
>>>
>>> --
>>> Alberto.
>>>
>>> _______________________________________________
>>> Haskell-Cafe mailing list
>>> Haskell-Cafe at haskell.org
>>> http://www.haskell.org/mailman/listinfo/haskell-cafe
>>>
>>>
>>
>
>
> --
> Alberto.
>



-- 
Alberto.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20130713/24dc69c9/attachment.htm>


More information about the Haskell-Cafe mailing list