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);