Skip to content
agocorona edited this page Mar 5, 2015 · 19 revisions

Roadmap

This is my roadmap for the creation of a general Haskell IT platform

Serialization keeping internal references. Necessary for "organic" efficient logging and recovery

Need some refactorization

STM Database cache

completed

Logging, recovery of process state and workflow EDSL

need a rewrite of Patterns.hs using applicative combinators.

Server-side web framework and application integration platform.

It is the backbone of all the other functionalities

essentially completed

Practically finished, with extensible events. it is the EDSL of MFlow for composing pages, but running fully in the browser Therefore it is a Single page, client side framework. It uses Perch

Perch

is an EDSL with the syntax of Blaze.Html running in the browser, updating the DOM tree Run using the Haste compiler

Porting hplayground and Perch to:

Porting hplayground to some window framework like GTK

That could be done since the MFlow-hplayground EDSL it is rendering independent. Need a new instance of FormInput for GTK widgets basically. Since the EDSL used by MFlow and hplayground for the creation of widgets is fully composable, to have the same EDSL for some GUI toolkit would make this the first GUI toolkit ever that have composable widgets.

Cordova/Phonegap/ionic

Extending it to run in Cordova/phonegap and all the cordova compatible smarphone frameworks. Done with configurable events.

To complete the spreadsheet example

To create more high level widgets for live programming

Transient

Transient is intended to be a simple monad/applicative/monoid fully charged with all the possible effects that a programmer may need from the beginning. It is intended for newbies in order to experiment the full power of Haskell without the need to know about category theory, how to define monads or how to use monad transformers. It is intended to make people productive using haskell from the first week of learning. Since it will have all major effects, it will permit to program at the specification level. A detail of the philosphy behind is this:

https://www.fpcomplete.com/tutorial-edit/An%20EDSL%20for%20hard%20working%20IT%20programmers

I recently implemented the backtracking mechanism of MFlow using the Transient monad facilities by adding additional primitives without changing the monad instance.

Transient is essentially, the monad of hplayground. In the long term MFLow and hplayground will be integrated in Transient. Transient has now a basic console interface that permits the creation of fully composable services. Finally, this EDSL will execute and distribute programs in the cloud and interact with the user in web browser, GUIs and console applications depending on the capabilities and need of the user.

To Integrate MFlow and hplayground in a isomorphic framework

Phase 1

The page EDSL is the same in MFlow and HPlayground.

create a modifier

    inBrowser :: Widget a -> View Html a

So that if the page fragment will be compiled as hplayground code and executed in the browser. Will seamlessly receive and send responses via AJAX

The Widget monad will be defined in MFlow as a "textualizer" of the haskell code:

        let x= "hello"
            y= "hi" 
        in inBrowser  wlink x <|> getString y 

Will be transformed into:

        "wlink \"hello\" <|> getSting \"hi\""

Then this text output will be hplayground code, that will be compiled to JScript

The response will be returned by AJAX.

Compilations will be cached

addition of onServer to hplayground to execute code in the server will be implemented as a AJAX server service

Phase II

A common EDSL for server and browser with dynamic inBrowser and onServer execution depending on runtime conditions and capabilities of server and browser.

Each sentence will have attributes of capabilities demanded: database query, display HTML, JS execution etc

server & client will have capabilities + dynamic attributes: server and client load etc

The EDSL will decide where the execute the code depending on the above capabilities & attributes

Cloud platform

MFlow in the cloud using synchornization, autodeployment (moving code), automatic failover and distribution of request load and data. It will use an extension of the above mentioned web architecture for moving code and disgtribution of resources.

Use the MFlow de-inversion of control, backtraking, login and recovery to handle the weak coupling between cloud nodes.

The goal is an unified architecture for the Web an the cloud where the Browser is one mode node in the cloud and an unified haskell-embedded language for IT.

An unified language for the web and the cloud