Chapter 05: Coding by Composing
The book heavily relies on a function called
compose
which combines functions Right -> Left
. fp-ts
provides a similar way to compose functions via flow
except that it operates on functions from Left -> Right
.book
ts
const toUpperCase = x => x.toUpperCase();
const exclaim = x => `${x}!`;
const shout = compose(exclaim, toUpperCase);
shout('send in the clowns'); // "SEND IN THE CLOWNS!"
import { flow, identity } from "fp-ts/function";
const toUpperCase = (x: string) => x.toUpperCase();
const exclaim = (x: string) => `${x}!`;
// note: order here is reversed
const shout = flow(toUpperCase, exclaim);
shout('send in the clowns'); // "SEND IN THE CLOWNS!"
book
ts
const dasherize = compose(
intercalate('-'),
map(toLower),
split(' '),
replace(/\s{2,}/ig, ' '),
);
dasherize('The world is a vampire'); // 'the-world-is-a-vampire'
import { map, Foldable } from "fp-ts/Array";
import * as S from "fp-ts/string";
import { intercalate } from "fp-ts/Foldable";
const replace = (search: string | RegExp) => (replace: string) => (s: string) =>
s.replace(search, replace);
const split = (search: string | RegExp) => (s: string) => s.split(search);
const toLower = (s: string) => s.toLocaleLowerCase();
const stringIntercalculate = (sep: string) => (s: string[]) =>
intercalate(S.Monoid, Foldable)(sep, s);
const dasherize = flow(
replace(/\s{2,}/gi)(" "),
split(" "),
map(toLower),
stringIntercalculate("-")
);
let output = dasherize("The world is a vampire"); // 'the-world-is-a-vampire'
fp-ts
also provides a function called pipe
which operates in a similar manor, except the first parameter acts as the input:let output = pipe(
'send in the clowns',
toUpperCase,
exclaim
); // "SEND IN THE CLOWNS!"
Last modified 2yr ago