@@ -2,6 +2,7 @@ package cats
22package instances
33
44import cats .syntax .show ._
5+
56import scala .annotation .tailrec
67import scala .collection .immutable .Queue
78import scala .util .Try
@@ -153,3 +154,31 @@ trait QueueInstances extends cats.kernel.instances.QueueInstances {
153154 fa.iterator.map(_.show).mkString(" Queue(" , " , " , " )" )
154155 }
155156}
157+
158+ private [instances] trait QueueInstancesBinCompat0 {
159+ implicit val catsStdTraverseFilterForQueue : TraverseFilter [Queue ] = new TraverseFilter [Queue ] {
160+ val traverse : Traverse [Queue ] = cats.instances.queue.catsStdInstancesForQueue
161+
162+ override def mapFilter [A , B ](fa : Queue [A ])(f : (A ) => Option [B ]): Queue [B ] =
163+ fa.collect(Function .unlift(f))
164+
165+ override def filter [A ](fa : Queue [A ])(f : (A ) => Boolean ): Queue [A ] = fa.filter(f)
166+
167+ override def collect [A , B ](fa : Queue [A ])(f : PartialFunction [A , B ]): Queue [B ] = fa.collect(f)
168+
169+ override def flattenOption [A ](fa : Queue [Option [A ]]): Queue [A ] = fa.flatten
170+
171+ def traverseFilter [G [_], A , B ](fa : Queue [A ])(f : (A ) => G [Option [B ]])(implicit G : Applicative [G ]): G [Queue [B ]] =
172+ fa.foldRight(Eval .now(G .pure(Queue .empty[B ])))(
173+ (x, xse) => G .map2Eval(f(x), xse)((i, o) => i.fold(o)(_ +: o))
174+ )
175+ .value
176+
177+ override def filterA [G [_], A ](fa : Queue [A ])(f : (A ) => G [Boolean ])(implicit G : Applicative [G ]): G [Queue [A ]] =
178+ fa.foldRight(Eval .now(G .pure(Queue .empty[A ])))(
179+ (x, xse) => G .map2Eval(f(x), xse)((b, vec) => if (b) x +: vec else vec)
180+ )
181+ .value
182+ }
183+
184+ }
0 commit comments