JSFiddle - React, Tailwind, and code Playground

by dimitrs_papadimitriou

JavaScript

var gr1 = [[true,false,false,true,false,false,true,false,false],[true,false,false,true,false,false,true,false,false],[true,false,false,true,false,false,true,false,false]];
 
 var   gridComonad=g=>({
  map: f =>  gridComonad(g.map(x=>x.map(y=>f(y)))),
  fold: (acc, f) => g.reduce(acc,(a,e)=>e.reduce(a,(acc,e1)=>f(acc,e1))),
  extendAnn: f =>    n(l.extendAnn(f), v, r.extendAnn(f), f(n(l, v, r, annotation))),
  extract: () => annotation


 });
     var n = (l, v, r, annotation) => ({
      map: f => n(l.map(f), f(v), r.map(f), annotation),
      foldAnn: (acc, f) => r.foldAnn(l.foldAnn(f(acc, annotation), f), f),
      extendAnn: f =>    n(l.extendAnn(f), v, r.extendAnn(f), f(n(l, v, r, annotation))),
      extract: () => annotation
    });
    
    var lf = (v, annotation) => ({
      map: f => lf(f(v), annotation),
      foldAnn: (acc, f) => f(acc, annotation),
      extendAnn: f => lf(v, f(lf(v, annotation))),
      extract: () => annotation
    });
    
var t =  gridComonad(gr1).map(x=>false).fold(false, (a,e)=>a||e);