[Haskell-cafe] Fwd: [Haskell] ANNOUNCE: MFlow-0.1.5

Alberto G. Corona agocorona at gmail.com
Tue Sep 18 18:33:56 CEST 2012

Oh,  I´m stupid. You mean web pages with multiple tabs....

 I have not tested it. but each tab can be handled easily by a different
server process.. or it can be handled in a single server process, like in a
menu. For example, this code present different options, and the process
renders different things depending on the response.

The last option is a link to a different process, while the others( wlinks)
are links that return back to the same process.
The operator <|> is the applicative operator.  a breakline is prepended to
each link:

data Ops= Ints | Strings | Actions | Ajax | Opt deriving(Typeable,Read,

 mainf=   do
        r <- ask $   wlink Ints (bold << "increase an Int")
                <|>  br ++> wlink Strings (bold << "increase a String")
                <|>  br ++> wlink Actions (bold << "Example of a string
widget with an action")
                <|>  br ++> wlink Ajax (bold << "Simple AJAX example")
                <|>  br ++> wlink Opt (bold << "select options")
                <++ (br +++ linkShop) -- this is an ordinary XHtml link

        case r of
          Ints    ->  clickn 0
          Strings ->  clicks "1"
          Actions ->  actions 1
          Ajax    ->  ajaxsample
          Opt     ->  options
     linkShop= toHtml $ hotlink  "shop" << "shopping"


2012/9/18 Alberto G. Corona <agocorona at gmail.com>:

> Hi Jake
> I don´t know what you mean with multiple tabs. The user management is
> simple, anonymous clients are identified with  a cookie. if the user
> is logged (MFlow has widgets for logging-validation) the user is the
> identifier.
> The state of a process is associated to the client identifier and to
> the path invoked in the url requested.
> I don´t know if this answer your question....
> Alberto
> 2012/9/18 Jake McArthur <jake.mcarthur at gmail.com>:
>> This sounds really cool.
>> How do you handle users having multiple tabs?
>> On Tue, Sep 18, 2012 at 11:26 AM, Alberto G. Corona <agocorona at gmail.com>
>>> Hi haskellers and specially the web developers.
>>> http://hackage.haskell.org/package/MFlow-
>>> MFlow is a is a Web framework with some unique, and I mean unique,
>>> characteristics that I find exciting:
>>> - It is a Web application server that start and restart on-demand
>>> stateful web server processes (not request.-response)
>>>   This means that all the page navigation can be coded in a single
>>> procedure. This increases readability of the programmer code. I woul
>>> call it
>>> a anti-node.js.  Buit usual request-response (stateless) server
>>> processes are also allowed
>>> - When the process is invoqued as result of an URL request, the Web
>>> app server not only restart the process but also recover its execution
>>> state. The enclosing Workflow monad provides the thread state
>>> persistence. There are state timeouts and process timeouts defined by
>>> the programmer. Processes with no persistent state (transient) are
>>> possible.
>>> -The user interface is made of widgets. They are  formlets with added
>>> formatting,   attributes, validations, modifiers and callbacks, that
>>> are composable, so the pieces are reusable and return type safe
>>> responses to the calling process. Even the links are part of widgets
>>> and return back type safe inputs at compile time to the calling server
>>> process. Tho glue these components, ordinary applicative combinators
>>> and other extra combinators are used.
>>> - The widgets and the communication don´t make assumptions about the
>>> architecture, so it can be adapted to non-web environments. This
>>> versions has interface for WAI-warp, Hack, Text.XHtml (xhtml) , and
>>> Haskell Server Pages.
>>> -The widget rendering can be converted to ByteStrings automatically
>>> with special combinators. A mix of widgets with different formats can
>>> be combined in the same source file. For example Text.Html and HSP
>>> (Haskell server pages)
>>> -These widgets can be cached, to avoid widget rendering on every
>>> -To handle the back button, and because the processes are stateful,
>>> they can run backwards until the response match. This is transparent
>>> for the programmer, thanks to the embedded FlowM monad.
>>> -All the code is in pure Haskell. No deployment, special scripts,
>>> formats etc are necessary.
>>> -Besides automatic state persistence, TCache provides transactions and
>>> user data persistence, that can be configured for SQL databases.
>>> Default persistence in files permit very rapid prototyping. Just code
>>> and run it with runghc.
>>> -Has AJAX support
>>> All of this sounds very complicated, but really it is simple!. Most of
>>> these things are transparent. The resulting code is quite readable and
>>> has very little plumbing!
>>> There is a non trivial example that some of these functionalities
>>> embedded here that you can run:
>>> Take a look and tell me your opinion.  I hope that you find it as
>>> exciting as me.
>>>  I´m looking for people  to collaborate in the development of MFlow.
>>> Although still it is experimental, it is being used in at least one
>>> future commercial project. So I have te commitment to continue its
>>> development. There are many examples in the documentation and in the
>>> package.
>>> Alberto
>>> _______________________________________________
>>> Haskell mailing list
>>> Haskell at haskell.org
>>> http://www.haskell.org/mailman/listinfo/haskell
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20120918/efd69942/attachment-0001.htm>

More information about the Haskell-Cafe mailing list