Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/gcanti/flow-static-land
[DEPRECATED, please check out fp-ts] Implementation of common algebraic types in JavaScript + Flow
https://github.com/gcanti/flow-static-land
Last synced: 3 months ago
JSON representation
[DEPRECATED, please check out fp-ts] Implementation of common algebraic types in JavaScript + Flow
- Host: GitHub
- URL: https://github.com/gcanti/flow-static-land
- Owner: gcanti
- License: mit
- Archived: true
- Created: 2016-08-14T12:42:44.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2017-11-02T20:48:40.000Z (about 7 years ago)
- Last Synced: 2024-07-03T18:55:34.645Z (4 months ago)
- Language: JavaScript
- Homepage:
- Size: 133 KB
- Stars: 408
- Watchers: 15
- Forks: 22
- Open Issues: 10
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
- awesome-list - flow-static-land - ts] Implementation of common algebraic types in JavaScript + Flow | gcanti | 414 | (JavaScript)
README
# Features
- statically type checked by [Flow](https://flowtype.org/)
- PureScript-like standard library
- [static land](https://github.com/rpominov/static-land) compatibleThe idea (faking higher kinded types in Flow) is based on the paper [Lightweight higher-kinded polymorphism](https://www.cl.cam.ac.uk/~jdy22/papers/lightweight-higher-kinded-polymorphism.pdf) and [elm-brands](https://github.com/joneshf/elm-brands).
# Example
```js
import * as maybe from 'flow-static-land/lib/Maybe'
import * as arr from 'flow-static-land/lib/Arr'const f = (n) => n * 2
const g = (n) => n + 1// functor
maybe.map(f, maybe.Nothing) // => null
maybe.map(f, maybe.of(3)) // => 6const a1 = arr.inj([f, g])
const a2 = arr.inj([1, 2, 3])// applicative
arr.ap(a1, a2) // => [2, 4, 6, 2, 3, 4]
```Statically type checked
```js
maybe.map(f, maybe.of('s'))
```Error
```
maybe.map(f, maybe.of('s'))
^^^^^^^^^^^^^ call of method `of`
const f = (n) => n * 2
^ string. This type is incompatible with
const f = (n) => n * 2
^^^^^ number
```# Related libraries
- [static-land-recursion-schemes](https://github.com/JosephJNK/static-land-recursion-schemes)
# Related blog posts
- [Higher kinded types with Flow](https://medium.com/@gcanti/higher-kinded-types-in-flow-275b657992b7)
- [Expressing side effects with the `Eff` monad](https://medium.com/@gcanti/the-eff-monad-implemented-in-flow-40803670c3eb)
- [Phantom types with Flow](https://medium.com/@gcanti/phantom-types-with-flow-828aff73232b)# More examples
`examples` directory:
- a Signal library ([purescript-signal](https://github.com/bodil/purescript-signal) porting)
- a QuickCheck library ([purescript-quickcheck](https://github.com/purescript/purescript-quickcheck) partial porting)# Setup
```sh
npm install flow-static-land --save
```Babel config
```json
{
"presets": ["es2015"],
"plugins" : [
"syntax-flow",
"transform-flow-strip-types",
"transform-class-properties"
]
}
```# License
The MIT License (MIT)