From 79846dda379d73679d775134ef3d8bdcbc3572cb Mon Sep 17 00:00:00 2001 From: Paul Gualotuna Date: Tue, 7 Jan 2020 21:09:11 +0100 Subject: [PATCH] feat(ch09): use currying for specializing functions, example --- .../9.1_curry-and-fn-composition.js | 2 ++ .../9.1_curry-and-fn-composition.test.js | 14 +++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) 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 f935d60..ff4e1da 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 @@ -8,3 +8,5 @@ export const trace = label => value => { }; export const pipe = (...fns) => x => fns.reduce((acum, f) => f(acum), x); + +export const map = fn => mappable => mappable.map(fn); 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 533ad60..d029278 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, pipe, sum, trace} from "./9.1_curry-and-fn-composition"; +import {compose, map, pipe, sum, trace} from "./9.1_curry-and-fn-composition"; import {spy} from "sinon"; describe("Curry and Function Composition", () => { @@ -70,5 +70,17 @@ describe("Curry and Function Composition", () => { 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'); + }); + + it("should specialize functions by currying", () => { + const array = [1, 2, 3, 4, 5]; + const isEven = x => x % 2 === 0; + + const stripe = n => isEven(n) ? 'even' : 'odd'; + + const stripeAll = map(stripe); + const striped = stripeAll(array); + + expect(striped).to.deep.equal(['odd', 'even', 'odd', 'even', 'odd']); }) });