Combination of a free applicative functor and free monad
Clone or download
safareli Merge pull request #29 from safareli/dev
chore(publish) trigger publish of major version
Latest commit 5e2caa3 Oct 25, 2016
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
src
test
tools
.eslintrc.js
.gitignore
.travis.yml
LICENSE
README.md
package.json
webpack.config.babel.js

README.md

Free Build Status npm Version Code Coverage Code Climate License

Combination of a Free applicative functor and Free monad.

API

Free implements Functor, Applicative, ChainRec and Monad specifications.

Functor, Applicative, ChainRec and Monad functions:

  • Free.prototype.map :: Free i a -> (a -> b) -> Free i b
  • Free.prototype.ap :: Free i a -> Free i (a -> b) -> Free i b
  • Free.prototype.chain :: Free i a -> (a -> Free i b) -> Free i b
  • Free.chainRec :: ((a -> c, b -> c, a) -> Free i c, a) -> Free i b
  • Free.of :: a -> Free i a

Free structure functions:

  • Free.prototype.hoist :: Free i a -> (i -> z) -> Free z a
  • Free.liftF :: i -> Free i a
  • Free.prototype.retract :: (ChainRec m, Monad m) => Free m a -> TypeRep m -> m a
  • Free.prototype.graft :: Free i a -> (i -> Free z a) -> Free z a
  • Free.prototype.foldMap :: (ChainRec m, Monad m) => Free i a -> (i -> m a) -> TypeRep m -> m a

Free structure function equivalencies:

  • graft(f) ≡ foldMap(f, Free)
  • hoist(f) ≡ foldMap(compose(liftF, f), Free)
  • retract(M) ≡ foldMap(id, M)
  • foldMap(f, M) ≡ compose(retract(M), hoist(f))

This module was started as port of srijs/haskell-free-concurrent to JavaScript.