Applicative Composition

by dimitrs_papadimitriou

HTML

<script src="https://rawgit.com/eu81273/jsfiddle-console/master/console.js"></script>

JavaScript

var Id = v => ({
    v: v,
    map: f => Id(f(v)),
    app: fa => fa.map(a => v(a)),
  });
  
 var composeF = FG => ({
  unComp: FG,
    map: fab => composeF(FG.map(x => x.map(fab))),
    app: FGa => composeF(FG.map(Gfab => Gfab.app).app(FGa.unComp))
  });
 
  var r = composeF(Id(Id(x => y => x * y))).app(composeF(Id(Id(3)))).app(composeF(Id(Id(3)))); 
 
  console.log(r.unComp.v.v)