* Fix languages * Missed change for version number * Add language field for presentation * Revert change in README for double buffer Co-authored-by: Jackie Nim <=>
38 lines
1.1 KiB
Markdown
38 lines
1.1 KiB
Markdown
---
|
|
layout: pattern
|
|
title: Combinator
|
|
folder: combinator
|
|
permalink: /patterns/combinator/
|
|
categories: Idiom
|
|
language: en
|
|
tags:
|
|
- Reactive
|
|
---
|
|
|
|
## Also known as
|
|
Composition pattern
|
|
|
|
## Intent
|
|
The functional pattern representing a style of organizing libraries centered around the idea of combining functions.
|
|
Putting it simply, there is some type T, some functions for constructing "primitive" values of type T,
|
|
and some "combinators" which can combine values of type T in various ways to build up more complex values of type T.
|
|
|
|
## Class diagram
|
|

|
|
|
|
## Applicability
|
|
Use the combinator pattern when:
|
|
|
|
- You are able to create a more complex value from more plain values but having the same type(a combination of them)
|
|
|
|
## Real world examples
|
|
|
|
- java.util.function.Function#compose
|
|
- java.util.function.Function#andThen
|
|
|
|
## Credits
|
|
|
|
- [Example for java](https://gtrefs.github.io/code/combinator-pattern/)
|
|
- [Combinator pattern](https://wiki.haskell.org/Combinator_pattern)
|
|
- [Combinatory logic](https://wiki.haskell.org/Combinatory_logic)
|