JSFiddle - React, Tailwind, and code Playground

by dimitrs_papadimitriou

JavaScript

var n = (l, v, r) => ({
  map: f => n(l.map(f), f(v), r.map(f)),
  fold: (acc, accf) =>    accf(accf(accf(acc, l.fold(acc, accf)), v), r.fold(acc, accf)),
  dublicate: () => n(l.dublicate(), (l, v, r), r.dublicate()),
  extend: f => n(l, v, r).dublicate().map(f), 
  extract : ()=>v,
});

var lf = v => ({
  map: f => lf(f(v)),
  fold: (acc, accf) => accf(acc, v),
  dublicate: () => lf(lf(v)),
  extend: f =>lf(v).dublicate().map(f),
  extract : ()=>v,
});

var comonad = n(  n(n(lf(2), 2, lf(3)), 2, lf(3)),  2,  n(lf(2), 2, n(lf(2), 2, lf(3))));

cokleisli = (f, g) => c => g(c.extend(f));

var f = c => c.extract() * 2;
var g = c => c.extract() * 3;
var h = c => c.extract() * 5;

var composition = cokleisli(f, g);

console.log(comonad.extend(cokleisli(f, cokleisli(g, h))).extract());
console.log(comonad.extend(cokleisli(cokleisli(f, g), h)).extract());
 ///////////////////////////////////////////////////
const lens = get => set => ({ get, set });
const view = lens => obj => lens.get(obj);
const set = lens => val => obj => lens.set(val)(obj);
const over = lens => fn => obj => set(lens)(fn(view(lens)(obj)))(obj);
const lensProp = key => lens(prop(key))(assoc(key));

 
const compose = (...fns) => fns.reduce((f, g) => (...args) => f(g(...args)));
const map = fn => list => list.map(fn);
const filter = fn => list => list.filter(fn);
const lt = left => right => left < right;
const add = left => right => left + right;
const upper = str => str.toUpperCase();
const prop = key => obj => obj[key];
const assoc = key => val => obj => Object.assign({}, obj, {[key]: val});



//var t =[{n:6}, {n:2}].filter(over(lens(prop('n'))(assoc('n')))(lt(5)));
var namelens = lensProp('n');

var t  = map(view(namelens))([{n:6}, {n:2}]);

var t = compose( 
   map(over(namelens)(add('€ ')),
     filter(compose(lt(5), view(namelens)))))
     ([{n:6}, {n:2}]);
     
     
/////////////////////////////////////////////////////////////////////////////////////////////
     var n = (l, v, r, annotation)...