README
Point-free Functional Programming Helpers
A collection of curried point-free implementations for common list operations.
Usage
All functions take a function as the first argument, and data as its second. Since all functions are curried, you can provide arguments one at a time, and receive functions in return until all arguments are provided.
import { map, filter } from '@earthtone/pffp-helpers'
const isString = s => typeof s === 'string'
const uppercase = s => s.toUpperCase()
const onlyStrings = filter(isString)
const uppercaseAll = map(uppercase)
const harmonia = {
year: 1970,
guitar: 'rother',
keys: 'roedelius',
rhythms: 'moebius'
}
console.log(uppercaseAll(onlyStrings(harmonia))) // -> { guitar: 'ROTHER', keys: 'ROEDELIUS', rhythms: 'MOEBIUS' }
map
, filter
, and find
all operate on Array
s internally, so all callback functions are passed only the values of an Object
. If you have a more advanced application that requires your callback to be aware of an Object
s keys, you can use reduce.
import { isObject } from '@earthtone/tiny-predicates'
import { map, reduce } from '@earthtone/pffp-helpers'
const freeJazz = {
year: 1961,
alto: 'ornette coleman',
pocket_trumpet: 'don cherry',
bass_1: 'scott lafaro',
drums_1: 'billy higgins',
bass_clarinet: 'eric dolphy',
trumpet: 'freddie hubbard',
bass_2: 'charlie haden',
drums_2: 'ed blackwell'
}
const onlyTrumpets = reduce((a, [key, val]) => {
if (/trumpet/.test(key) && isObject(a)) {
a[key] = val
return a
} else {
return a
}
}, {})
const getLastname = map(name => name.split(' ')[1])
console.log(getLastName(onlyTrumpets(freeJazz))) // -> { pocket_trumpet: 'cherry', trumpet: 'hubbard' }
Functions
map
: point-free implementation ofArray.prototype.map
that works onArray
andObject
primitivesreduce
: point-free implementation ofArray.prototype.reduce
that works onArray
andObject
primitivesfilter
: point-free implementation ofArray.prototype.filter
that works onArray
andObject
primitivesfind
: point-free implementation ofArray.prototype.find
that works onArray
andObject
primitivestoPairs
: point-free implementation ofObject.entries
for turningObject
primitives into iterablesfromPairs
: point-free function for transforming a 2D key/valueArray
into anObject
primitive