Reader View Templates example

https://github.com/eu81273/jsfiddle-console

by dimitrs_papadimitriou

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;