function transduceExample() { const { completing, transduce, wrap } = t; const stringAppendFn = (acc: string, x: number) => acc + x; const stringAppendTransformer = wrap(stringAppendFn); const stringAppendThenLengthTransformer = completing( stringAppendFn, s => s.length, ); const lengthsString1: string = transduce( t.map((s: string) => s.length), stringAppendFn, "", ["a", "b"], ); const lengthsString2: string = transduce( t.map((s: string) => s.length), stringAppendTransformer, "", ["a", "b"], ); const lengthsStringLength: number = transduce( t.map((s: string) => s.length), stringAppendThenLengthTransformer, "", ["a", "b"], ); }
function intoExample () { var inc = function(n: number) { return n+1; }; var isEven = function(n: number) { return n % 2 == 0; }; var apush = function(arr: number[], x: number) { arr.push(x); return arr; }; var xf = t.comp(t.map(inc),t.filter(isEven)); t.into([], xf, [1,2,3,4]); // [2,4] }
function advancedIntoExample() { const array: number[] = into([], t.map((s: string) => s.length), [ "a", "b", ]); const string: string = into("", t.map((s: string) => s + s), ["a", "b"]); const object1: { [key: string]: number } = into( {}, t.map((s: string) => [s, s.length] as [string, number]), ["a", "b"], ); const object2: { [key: string]: boolean } = into( {}, t.map((kv: [string, number]) => [kv[0], true] as [string, boolean]), { a: 1, b: 2 } ); }
function catExample () { var reverse = function(arr: number[]) { var arr: number[] = Array.prototype.slice.call(arr, 0); arr.reverse(); return arr; }; var xf = t.comp(t.map(reverse), t.cat); t.into([], xf, [[3,2,1],[6,5,4]]); // [1,2,3,4,5,6] }
it('transduces Stack without initial values', () => { let s = Stack.of(1, 2, 3, 4); let xform = t.comp( t.filter(x => x % 2 === 0), t.map(x => x + 1), ); let s2 = t.transduce(xform, Stack(), s); expect(s.toArray()).toEqual([1, 2, 3, 4]); expect(s2.toArray()).toEqual([5, 3]); });
it('transduces Set without initial values', () => { let s1 = Set.of(1, 2, 3, 4); let xform = t.comp( t.filter(x => x % 2 === 0), t.map(x => x + 1), ); let s2 = t.transduce(xform, Set(), s1); expect(s1.toArray()).toEqual([1, 2, 3, 4]); expect(s2.toArray()).toEqual([3, 5]); });
it('transduces Map without initial values', () => { let m1 = Map({a: 1, b: 2, c: 3, d: 4}); let xform = t.comp( t.filter(([k, v]) => v % 2 === 0), t.map(([k, v]) => [k, v * 2]), ); let m2 = t.transduce(xform, Map(), m1); expect(m1.toObject()).toEqual({a: 1, b: 2, c: 3, d: 4}); expect(m2.toObject()).toEqual({b: 4, d: 8}); });
it('transduces List without initial values', () => { let v = List.of(1, 2, 3, 4); let xform = t.comp( t.filter(x => x % 2 === 0), t.map(x => x + 1), ); let r = t.transduce(xform, List(), v); expect(v.toArray()).toEqual([1, 2, 3, 4]); expect(r.toArray()).toEqual([3, 5]); });
it('transduces Stack with initial values', () => { const v1 = Stack.of(1, 2, 3); const v2 = Stack.of(4, 5, 6, 7); const xform = t.comp( t.filter(x => x % 2 === 0), t.map(x => x + 1), ); const r = t.transduce(xform, Stack(), v1, v2); expect(v1.toArray()).toEqual([1, 2, 3]); expect(v2.toArray()).toEqual([4, 5, 6, 7]); expect(r.toArray()).toEqual([7, 5, 1, 2, 3]); });
it('transduces Set with initial values', () => { let s1 = Set.of(1, 2, 3, 4); let s2 = Set.of(2, 3, 4, 5, 6); let xform = t.comp( t.filter(x => x % 2 === 0), t.map(x => x + 1), ); let s3 = t.transduce(xform, Set(), s1, s2); expect(s1.toArray()).toEqual([1, 2, 3, 4]); expect(s2.toArray()).toEqual([2, 3, 4, 5, 6]); expect(s3.toArray()).toEqual([1, 2, 3, 4, 5, 7]); });