Id functor Typescript -example
by dimitrs_papadimitriou
HTML
<code>
result: <span id="1" ></span>
</code>
TypeScript
interface monoid<T> {
Empty: T;
Concat: (u: T, v: T) => T
}
function slice<T>(list: Array<T>, size: number): Array<Array<T>> {
var accumulation: Array<Array<T>> = [];
for (var i = 0; i < list.length; i += size) {
var chunk: (Array<T>) = list.slice(i, i + size);
accumulation.push(chunk);
}
return accumulation;
}
function mapReduce<T, T1>(
list: Array<Array<T>>,
f: (v: T) => T1,
m: monoid<T1>): T1 {
var accumulation: Array<T1> = [];
for (var i = 0; i < list.length; i++) {
var chunk = list[i];
var reduction: T1 = chunk.map(f).reduce(m.Concat, m.Empty);
accumulation.push(reduction);
}
return accumulation.reduce(m.Concat, m.Empty);
}
var bigList = [...Array(10)].map((_, i) => i);
var reduced = mapReduce<number, number>(slice(bigList, 1), x => x + 1, ({ Empty: 0, Concat: (x, y) => x + y }))
log( 1,reduced)