Skip to content
This repository was archived by the owner on Feb 16, 2021. It is now read-only.
/ flow-static-land Public archive

[DEPRECATED, please check out fp-ts] Implementation of common algebraic types in JavaScript + Flow

License

Notifications You must be signed in to change notification settings

gcanti/flow-static-land

Folders and files

NameName
Last commit message
Last commit date

Latest commit

d04dbb7 · Nov 2, 2017
Nov 20, 2016
Nov 22, 2016
Nov 2, 2017
Feb 25, 2017
Sep 12, 2016
Aug 17, 2016
Nov 24, 2016
Sep 12, 2016
Aug 23, 2016
Nov 2, 2017
Sep 12, 2016
Jul 9, 2017
Nov 2, 2017

Repository files navigation

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:

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)

About

[DEPRECATED, please check out fp-ts] Implementation of common algebraic types in JavaScript + Flow

Resources

License

Stars

Watchers

Forks

Packages

No packages published