@safareli/free

Combination of a free applicative functor and free monad


Keywords
free, applicative, functor, monad
License
MIT
Install
npm install @safareli/free@1.0.0

Documentation

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.