Mostly Adequate with fp-ts
1.0.0
1.0.0
  • Welcome
  • Chapter 01: What Ever Are We Doing?
  • Chapter 04: Currying
  • Chapter 05: Coding by Composing
  • Chapter 06: Example Application
  • Chapter 08: Tupperware
  • Chapter 09: Monadic Onions
  • Chapter 10: Applicative Functors
Powered by GitBook
On this page

Was this helpful?

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.

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!"
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'

Pipe

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!"
PreviousChapter 04: CurryingNextChapter 06: Example Application

Last updated 4 years ago

Was this helpful?