TFunctor for monad transformers
Open
@kailuowang is already working on this.
Since Aug 10, 2017.
in progress
- Dominant language
- Scala
- Stars
- 5.5k
- Forks
- 1.2k
- Avg merge
- 2d 10h
- Merged PRs (30d)
- 5
Description
As a continuation of #1713 and #1492. I am working on a PR
/**
* This is an endofunctor in the category of endofunctors in `Skal`.
*
* `Skal` is the category of scala types. Functors in `Skal`
* is encoded as `Functor`. The functors in `Skal` themselves forms
* a category, let's denote it as `F[Skal]`.
* In `F[Skal]`, functors of Skal, e.g. `Option[_]` and `Either[E, _]`, are objects,
* while natural transformations, e.g. `Option ~> Either[E, ?]`, are arrows.
* A endofunctor in `F[Skal]` maps one set of functors of `Skal` to another
* set of functors of `Skal` while preserving the structures.
*
* For `TFunctor`, the domain is `F[_]`, the codomain is `H[F, _]`, both are
* functors in `Skal`. The `TFunctor` provides a mapping from the arrows between
* `F[_]` and `G[_]`, i.e. `F ~> G` to arrows between `H[F, _]` and `H[G, _]`,
* i.e. `H[F, ?] ~> H[G, ?]`. The `lift` method makes this intention clear.
*
* In `cats.core`, examples of such `TFunctor`s are monad transformers such
* as `OptionT`, `EitherT`
*
*/
@typeclass trait TFunctor[H[_[_], _]] {
def map[F[_], G[_], A](h: H[F, A])(f: F ~> G): H[G, A]
def lift[F[_], G[_]](f: F ~> G): H[F, ?] ~> H[G, ?] =
λ[H[F, ?] ~> H[G, ?]](hf => map(hf)(f))
}
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.