Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/igorw/compose
Function composition.
https://github.com/igorw/compose
Last synced: 3 months ago
JSON representation
Function composition.
- Host: GitHub
- URL: https://github.com/igorw/compose
- Owner: igorw
- License: mit
- Created: 2013-04-17T23:54:52.000Z (almost 12 years ago)
- Default Branch: master
- Last Pushed: 2014-02-10T21:02:05.000Z (almost 11 years ago)
- Last Synced: 2024-09-18T18:45:12.398Z (4 months ago)
- Language: PHP
- Size: 151 KB
- Stars: 84
- Watchers: 6
- Forks: 6
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
- awesome-php-cn - Compose - 一个功能组合库 (目录 / 数据结构和存储 Data Structure and Storage)
README
# igorw/compose
Function composition.
Allows you to stitch functions together to form a pipeline. This can be useful
if you have to transform data in many steps and you want to describe those
steps on a high level.## compose
Generally, function composition means taking two functions `f` and `g`, and
producing a new function `z`, which applies `f` to the result of `g`.z = compose(f, g)
; z(x) => f(g(x))This library provides a `compose` function that does just this.
$z = igorw\compose($f, $g);
var_dump($z($x));It supports an arbitrary number of functions to be composed via varargs.
$z = igorw\compose($f, $g, $h, $i);
The innermost function (the last one in the list) can take an arbitrary number
of arguments, whereas the others may only take a single argument.$z = igorw\compose($f, $g);
$z('a', 'b', 'c');
// => $f($g('a', 'b', 'c'))## pipeline
`pipeline` is the same as `compose`, but the arguments are reversed. This is
more easy to read in some cases, because you can list the functions in the
order they will be called.It is quite similar to a unix pipe in that regard.
## Examples
function transform_data($data) {
return [
'name' => $data['firstname'].' '.$data['lastname'],
];
}$transformJson = igorw\pipeline(
function ($json) { return json_decode($json, true); },
'transform_data',
'json_encode'
);$json = <<
// {"name": "Igor Wiedler"}
// {"name": "Beau Simensen"}