Я просто работал над приложением и столкнулся со случаем, когда я хотел бы абстрагироваться от добавляемых коллекций. Я придумал следующий класс типов.
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 с нулем, но я держу пари, что что-то подобное доступно для кошек или их экосистемы?