Mapping Haskell typeclasses to TypeScript
npm i
npm run lint
npm run build
npm testflowchart LR
BIFUNCTOR((Bifunctor))
BIFOLDABLE((BiFoldable))
BITRAVERSABLE((BiTraversable))
FUNCTOR((Functor))
APPLY((Apply))
APPLICATIVE((Applicative))
ALTERNATIVE((Alternative))
MONAD((Monad))
MONADTRANS((MonadTrans))
COMONAD((Comonad))
MONOID((Monoid))
SEMIGROUP((Semigroup))
TRAVERSABLE((Traversable))
FOLDABLE((Foldable))
MONADPLUS((MonadPlus))
BIFUNCTOR -- fix one arg --> FUNCTOR
BIFUNCTOR --> BIFOLDABLE
BIFOLDABLE --> BITRAVERSABLE
BIFUNCTOR --> BITRAVERSABLE
FUNCTOR --> APPLY
APPLY --> APPLICATIVE
APPLICATIVE --> ALTERNATIVE
APPLICATIVE --> MONAD
MONAD --> MONADTRANS
MONAD -. monoidal in endofunctors .-> MONOID
MONOID --> SEMIGROUP
COMONAD --> FUNCTOR
FUNCTOR --> TRAVERSABLE
FOLDABLE --> TRAVERSABLE
FOLDABLE --> MONADPLUS
ALTERNATIVE -. applicative pattern .-> MONOID
✓= available instance*= requires the underlying value type to have the same instance
| Type | Functor | Apply | Applicative | Alternative | Monad | MonadTrans | MonadPlus | Bifunctor | BiFoldable | BiTraversable | Comonad | ComonadApply | Foldable | Traversable | Semigroup | Monoid |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Maybe | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓* | ✓* | ||||||
| Either e | ✓ | ✓ | ✓ | ✓* | ✓ | ✓* | ✓ | ✓ | ✓ | ✓ | ✓ | ✓* | ✓* | |||
| List | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||||||
| NonEmpty | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | |||||||
| Reader r | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓* | ✓* | ||||||
| Writer w | ✓ | ✓* | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓* | ✓* | ||||||
| State s | ✓ | ✓ | ✓ | ✓ | ||||||||||||
| (->) r | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓* | ✓* | ||||||
| Tuple2 a | ✓ | ✓* | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓* | ✓* | |||
| Promise | ✓ | ✓ | ✓ | ✓ | ✓ | ✓* | ✓* | |||||||||
| Unit () | ✓ | ✓ | ||||||||||||||
| ReaderT r m | ✓* | ✓* | ✓* | ✓* | ✓ | |||||||||||
| WriterT w m | ✓* | ✓* | ✓* | ✓* | ✓ | ✓* | ✓* | ✓* | ||||||||
| StateT s m | ✓* | ✓* | ✓* | ✓* | ✓ | |||||||||||
| MaybeT m | ✓* | ✓* | ✓* | ✓* | ✓ | |||||||||||
| EitherT e m | ✓* | ✓* | ✓* | ✓* | ✓ | ✓* | ✓* | ✓* | ||||||||
| ExceptT e m | ✓* | ✓* | ✓* | ✓* | ✓ | |||||||||||
| RWST r w s m | ✓* | ✓* | ✓* | ✓* | ✓ | |||||||||||
| RWS r w s | ✓ | ✓* | ✓* | ✓* |
- Functor
- Apply
- Bifunctor
- BiFoldable
- BiTraversable
- Applicative
- Alternative
- Monad
- MonadPlus
- MonadTrans
- MaybeT
- EitherT
- ExceptT
- RWST
- RWS
- Comonad
- ComonadApply
- Foldable
- Traversable
- Foldable1
- Traversable1
- Semigroup
- Monoid
- Maybe (Functor, Apply, Applicative, Alternative, Monad, MonadPlus, Foldable, Traversable)
- Either (Functor, Apply, Applicative, Alternative, Monad, MonadPlus, Bifunctor, Foldable, Traversable)
- List (Functor, Apply, Applicative, Alternative, Monad, MonadPlus, Foldable, Traversable)
- NonEmpty list (Functor, Apply, Applicative, Monad, Comonad, ComonadApply, Foldable, Foldable1, Traversable, Traversable1)
- Reader (Functor, Apply, Applicative, Monad, Comonad, ComonadApply, Foldable, Traversable)
- Writer (Functor, Apply, Applicative, Monad, Comonad, ComonadApply, Foldable, Traversable)
- State (Functor, Apply, Applicative, Monad)
- Function arrow
(->)(Functor, Apply, Applicative, Monad, Comonad, ComonadApply, Foldable, Traversable) - Tuple2 and Unit (Functor, Apply, Applicative, Monad, Bifunctor, Comonad, ComonadApply, Foldable, Traversable, Semigroup, Monoid)
- Promise (Functor, Apply, Applicative, Monad, Foldable, Semigroup, Monoid)
- MonadTrans
- ReaderT (Functor, Applicative, Monad)
- WriterT (Functor, Applicative, Monad)
- StateT (Functor, Applicative, Monad)