Reader View Templates example
https://github.com/eu81273/jsfiddle-console
HTML
<script src="https://rawgit.com/eu81273/jsfiddle-console/master/console.js"></script>
<script src="https://code.jquery.com/jquery-3.4.0.js"></script>
JavaScript
var demo = function () {
const Either = (F) => ({
map: (f) =>Either(F.map(f)),
cata : alg=> F.cata(alg)
});
const Product = (F,G) => ({
map: (f) => Product(F.map(f),G.map(f)),
cata : alg=> (F.cata(alg),G.cata(alg))
});
const Id = (v) => ({
value: v,
map: (f) => Id(f(v)),
cata:alg=>alg(v)
});
var Reader = (expr) => ({
expr: expr,
map: f => Reader (env=>f(Reader(expr).run(env))) ,
run: env => expr(env),
cata:alg=>alg(v)
});
const template = Reader(({ firstName, lastName }) => `<div>${firstName} - ${lastName} </div>` )
var s = Product(Either(template),Either(Id("dimitris"))).map( x=>`<span>${x}</span>`)
}
module.exports = demo;