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)