@safareli/free

1.0.0 • Public • Published

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.

Package Sidebar

Install

npm i @safareli/free

Weekly Downloads

1

Version

1.0.0

License

MIT

Last publish

Collaborators

  • safareli