Package Exports
- flow-static-land/lib/Arr
- flow-static-land/lib/Either
- flow-static-land/lib/Fun
- flow-static-land/lib/Maybe
- flow-static-land/lib/Task
- flow-static-land/lib/Tuple
- flow-static-land/lib/Unsafe
- flow-static-land/src/Chain
- flow-static-land/src/Eff
- flow-static-land/src/Either
- flow-static-land/src/Getter
- flow-static-land/src/Maybe
- flow-static-land/src/PLens
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (flow-static-land) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
Features
- statically type checked by Flow
- PureScript-like standard library
- static land compatible
The idea (faking higher kinded types in Flow) is based on the paper Lightweight higher-kinded polymorphism and elm-brands.
Example
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)) // => 6
const 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
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
Related blog posts
More examples
examples
directory:
- a Signal library (purescript-signal porting)
- a QuickCheck library (purescript-quickcheck partial porting)
Setup
npm install flow-static-land --save
Babel config
{
"presets": ["es2015"],
"plugins" : [
"syntax-flow",
"transform-flow-strip-types",
"transform-class-properties"
]
}
License
The MIT License (MIT)