An open API service indexing awesome lists of open source software.

https://github.com/lagunoff/typescript-concrete-optics

Very basic concrete optics in typescript
https://github.com/lagunoff/typescript-concrete-optics

functional-programming lens lenses optics prism typescript

Last synced: 2 months ago
JSON representation

Very basic concrete optics in typescript

Awesome Lists containing this project

README

        

[![Generic badge](https://img.shields.io/badge/status-experimental-red.svg)](https://shields.io/)
## Installation
```sh
$ yarn add typescript-concrete-optics

```
## API reference
#### compose

`function compose(left: Lens, right: Lens): Lens;
function compose
(left: Prism, right: Prism): Prism;
function compose
(left: Iso, right: Iso): Iso;
function compose
(left: Iso, right: Lens): Lens;
function compose
(left: Lens, right: Iso): Lens;
function compose
(left: Iso, right: Prism): Prism;
function compose
(left: Prism, right: Iso): Prism;
function compose
(left: Optic, right: Optic): Optic;
function compose>(...args: Array>): R;`

Compose several different optics. Function can receive one or more
arguments with type-aligned `Optic`s, but type signatures exist
only for two parameters.

```ts
const lens = optics.identityLens();
const prism = optics.identityPrism();
const iso = optics.identityIso();

assert.isTrue(optics.isLens(optics.compose(lens, lens)));
assert.isTrue(optics.isPrism(optics.compose(prism, prism)));
assert.isTrue(optics.isIso(optics.compose(iso, iso)));
assert.isTrue(optics.isLens(optics.compose(iso, lens)));
assert.isTrue(optics.isPrism(optics.compose(iso, prism)));
assert.isTrue(optics.isCompose(optics.compose(lens, prism)));
```