Аппликатив с нуля - PullRequest
       60

Аппликатив с нуля

1 голос
/ 31 октября 2019

Я просто работал над приложением и столкнулся со случаем, когда я хотел бы абстрагироваться от добавляемых коллекций. Я придумал следующий класс типов.

trait AppendableCollection[F[_]] {
  def empty[A]: F[A]
  def append[A](fa: F[A])(a: A): F[A]
}

object AppendableCollection {
  implicit val reversedListCollection = new Collection[List] {
    def empty[A] = Nil
    def append[A](fa: List[A])(a: A) = a :: fa
  }
}

Это похоже на Applicative с нулем, но я держу пари, что что-то подобное доступно для кошек или их экосистемы?

1 Ответ

2 голосов
/ 01 ноября 2019

При условии pure(a: A): F[A], выглядит как MonoidK

trait MonoidK[F[_]] {
  def empty[A]: F[A]
  def combineK[A](x: F[A], y: F[A]): F[A]
}

https://github.com/typelevel/cats/blob/master/core/src/main/scala/cats/MonoidK.scala#L25

...