An experiment in porting my preferred ClojureScript architecture to Haskell
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
data
src
.dir-locals.el
.gitignore
LICENSE.txt
Makefile
README.org
Setup.hs
bellringer.cabal
cabal.config
default.nix
make.sh
mvc-updates.nix
mvc.nix
package.json
shell.nix

README.org

BellRinger - A Haskell Front-End Structure

Orientation

Specific To This App

Start with Messages. This defines the state of the front-end (the World), and the possible operations on it process. The front end changes by Messages coming in, being processed and moving the state of the World forward.

Next look at Render. This knows 2 things: how to turn the World into a DOM, and how to give the user the ability to generate Messages. It does not know how to process messages, and that’s an important separation in the design.

Reusable Structure

Look at Virtual. This is a library of functions for creating a ReactJS-style virtual DOM, and applying it as the state of the world changes. Efficient, functional rendering.

Finally, Main wires everything together, ensure that the world is rendered and re-rendered as new messages advance the state of the world.

So…

In a real app, the first two files would likely change vastly. This is where development effort would be spent: defining what to do, and how to display it.

The last two files should remain roughly the same, and will eventually be extracted into their own library.

Building

  1. Ensure you have ghcjs installed.
  2. make

Work To Do

  • [X] Demonstrate Networking
  • [ ] Demonstrate Forms
  • [ ] Use Lucid for DOM-generation.

License

Copyright © 2014 Kris Jenkins

Distributed under the Eclipse Public License.