From d9aeafe49c74253ce00246f641baba583060768e Mon Sep 17 00:00:00 2001 From: Paul Gualotuna Date: Mon, 13 Jan 2020 21:34:40 +0100 Subject: [PATCH] feat(ch09): add inverse trace and flip --- .../9.1_curry-and-fn-composition.js | 7 ++++++ .../9.1_curry-and-fn-composition.test.js | 22 +++++++++++++++++-- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/ch-09_curry-and-fn-composition/9.1_curry-and-fn-composition.js b/src/ch-09_curry-and-fn-composition/9.1_curry-and-fn-composition.js index ff4e1da..2ea05a4 100644 --- a/src/ch-09_curry-and-fn-composition/9.1_curry-and-fn-composition.js +++ b/src/ch-09_curry-and-fn-composition/9.1_curry-and-fn-composition.js @@ -7,6 +7,13 @@ export const trace = label => value => { return value; }; +export const traceInv = value => label => { + console.log(`${label}: ${value}`); + return value; +}; + export const pipe = (...fns) => x => fns.reduce((acum, f) => f(acum), x); export const map = fn => mappable => mappable.map(fn); + +export const flip = fn => a => b => fn(b)(a); diff --git a/src/ch-09_curry-and-fn-composition/9.1_curry-and-fn-composition.test.js b/src/ch-09_curry-and-fn-composition/9.1_curry-and-fn-composition.test.js index d2b10c5..b7387e9 100644 --- a/src/ch-09_curry-and-fn-composition/9.1_curry-and-fn-composition.test.js +++ b/src/ch-09_curry-and-fn-composition/9.1_curry-and-fn-composition.test.js @@ -1,5 +1,5 @@ import {assert, expect} from 'chai'; -import {compose, map, pipe, sum, trace} from "./9.1_curry-and-fn-composition"; +import {compose, flip, map, pipe, sum, trace, traceInv} from "./9.1_curry-and-fn-composition"; import {spy} from "sinon"; describe("Curry and Function Composition", () => { @@ -92,5 +92,23 @@ describe("Curry and Function Composition", () => { const doubled = doubleAll(array); expect(doubled).to.deep.equal([2, 4, 6, 8, 10]); - }) + }); + + it("should flip the order of two parameters in an inverse trace function", () => { + const f = a => a * 2; + const g = b => b + 1; + + const flippedTrace = flip(traceInv); + + const h = pipe( + g, + flippedTrace('after g'), + f, + flippedTrace('after f'), + ); + + expect(h(30)).to.equal(62); + assert(console.log.calledWith('after g: 31'), 'It is not after g: 31'); + assert(console.log.calledWith('after f: 62'), 'It is not after f: 62'); + }); });