Haskell is a strongly-typed, lazily-evaluated, functional programming language.
-
with automation
This example demonstrates an idiomatic haskell approach to the TodoMVC problem domain involving:
- compilation of haskell to javascript using ghcjs.
- The specification of a
Model
representing the problem domain, consisting of - specification of Abstract Data Types (ADTs) for inputs, state and outputs.
- an algebra between state and actions.
- Use of the mvc library for specification, asynchronicity and separation of model, view and controllers.
- The creation of
View
s that consume model outputs, by using vanilla javascript effects. - The creation of
Controller
s that produce model inputs, by listening for Dom events using vanilla javascript.
The recipe below handles the bits and bobs you need to do every re-compile. This includes a compression step via closure.
stack build --exec "pandoc -f markdown -i other/index.md -t html -o index.html --filter pandoc-include" --exec "java -jar $(stack path --local-bin)/closure-compiler-v20170124.jar --js_output_file=other/mvc-todo-auto.js $(stack path --local-install-root)/bin/mvc-todo-auto.jsexe/all.js" --exec "java -jar $(stack path --local-bin)/closure-compiler-v20170124.jar --js_output_file=other/mvc-todo.js $(stack path --local-install-root)/bin/mvc-todo.jsexe/all.js"