title: Applicative with zero
body: <p>I was just working on application and encountered case where I'd like to abstract over appendable collections. I came up with the following type class.</p>
  
  <pre><code>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
    }
  }
  </code></pre>
  
  <p>It kinda looks like Applicative with zero but and I bet there is something like this available in cats or its ecosystem?</p>