Skip to content

Commit b292d90

Browse files
committed
Move contain_ to UnorderedFoldableOps
1 parent a49ef0d commit b292d90

File tree

2 files changed

+60
-36
lines changed

2 files changed

+60
-36
lines changed

core/src/main/scala/cats/syntax/foldable.scala

Lines changed: 43 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -70,21 +70,7 @@ final class FoldableOps[F[_], A](private val fa: F[A]) extends AnyVal {
7070
def foldA[G[_], B](implicit F: Foldable[F], ev: A <:< G[B], G: Applicative[G], B: Monoid[B]): G[B] =
7171
F.foldA[G, B](fa.asInstanceOf[F[G[B]]])
7272

73-
/**
74-
* test if `F[A]` contains an `A`, named contains_ to avoid conflict with existing contains which uses universal equality
75-
*
76-
* Example:
77-
* {{{
78-
* scala> import cats.implicits._
79-
*
80-
* scala> val l: List[Int] = List(1, 2, 3, 4)
81-
* scala> l.contains_(1)
82-
* res0: Boolean = true
83-
* scala> l.contains_(5)
84-
* res1: Boolean = false
85-
* }}}
86-
*/
87-
def contains_(v: A)(implicit ev: Eq[A], F: Foldable[F]): Boolean =
73+
private[syntax] def contains_(v: A, ev: Eq[A], F: Foldable[F]): Boolean =
8874
F.exists(fa)(ev.eqv(_, v))
8975

9076
/**
@@ -185,7 +171,8 @@ final class FoldableOps[F[_], A](private val fa: F[A]) extends AnyVal {
185171
* res3: Either[String,Option[Int]] = Left(error)
186172
* }}}
187173
*/
188-
def findM[G[_]](p: A => G[Boolean])(implicit F: Foldable[F], G: Monad[G]): G[Option[A]] = F.findM[G, A](fa)(p)
174+
def findM[G[_]](p: A => G[Boolean])(implicit F: Foldable[F], G: Monad[G]): G[Option[A]] =
175+
F.findM[G, A](fa)(p)
189176

190177
/**
191178
* Tear down a subset of this structure using a `PartialFunction`.
@@ -196,7 +183,8 @@ final class FoldableOps[F[_], A](private val fa: F[A]) extends AnyVal {
196183
* res0: Int = 6
197184
* }}}
198185
*/
199-
def collectFold[M](f: PartialFunction[A, M])(implicit F: Foldable[F], M: Monoid[M]): M = F.collectFold[A, M](fa)(f)
186+
def collectFold[M](f: PartialFunction[A, M])(implicit F: Foldable[F], M: Monoid[M]): M =
187+
F.collectFold[A, M](fa)(f)
200188

201189
/**
202190
* Tear down a subset of this structure using a `A => Option[M]`.
@@ -209,7 +197,8 @@ final class FoldableOps[F[_], A](private val fa: F[A]) extends AnyVal {
209197
* }}}
210198
*/
211199
@deprecated("Use collectFoldSome", "2.1.0-RC1")
212-
def collectSomeFold[M](f: A => Option[M])(implicit F: Foldable[F], M: Monoid[M]): M = F.collectFoldSome[A, M](fa)(f)
200+
def collectSomeFold[M](f: A => Option[M])(implicit F: Foldable[F], M: Monoid[M]): M =
201+
F.collectFoldSome[A, M](fa)(f)
213202
}
214203

215204
final class FoldableOps0[F[_], A](private val fa: F[A]) extends AnyVal {
@@ -246,7 +235,8 @@ final class FoldableOps0[F[_], A](private val fa: F[A]) extends AnyVal {
246235
* a: String = "foo321"
247236
* }}}
248237
*/
249-
def foldMapK[G[_], B](f: A => G[B])(implicit F: Foldable[F], G: MonoidK[G]): G[B] = F.foldMapK(fa)(f)
238+
def foldMapK[G[_], B](f: A => G[B])(implicit F: Foldable[F], G: MonoidK[G]): G[B] =
239+
F.foldMapK(fa)(f)
250240

251241
/**
252242
* Separate this Foldable into a Tuple by an effectful separating function `A => H[B, C]` for some `Bifoldable[H]`
@@ -305,23 +295,40 @@ final class FoldableOps0[F[_], A](private val fa: F[A]) extends AnyVal {
305295
)(implicit A: Alternative[F], F: Foldable[F], M: Monad[G]): G[(F[B], F[C])] =
306296
F.partitionEitherM[G, A, B, C](fa)(f)(A, M)
307297

308-
def sliding2(implicit F: Foldable[F]): List[(A, A)] = F.sliding2(fa)
309-
def sliding3(implicit F: Foldable[F]): List[(A, A, A)] = F.sliding3(fa)
310-
def sliding4(implicit F: Foldable[F]): List[(A, A, A, A)] = F.sliding4(fa)
311-
def sliding5(implicit F: Foldable[F]): List[(A, A, A, A, A)] = F.sliding5(fa)
312-
def sliding6(implicit F: Foldable[F]): List[(A, A, A, A, A, A)] = F.sliding6(fa)
313-
def sliding7(implicit F: Foldable[F]): List[(A, A, A, A, A, A, A)] = F.sliding7(fa)
314-
def sliding8(implicit F: Foldable[F]): List[(A, A, A, A, A, A, A, A)] = F.sliding8(fa)
315-
def sliding9(implicit F: Foldable[F]): List[(A, A, A, A, A, A, A, A, A)] = F.sliding9(fa)
316-
def sliding10(implicit F: Foldable[F]): List[(A, A, A, A, A, A, A, A, A, A)] = F.sliding10(fa)
317-
def sliding11(implicit F: Foldable[F]): List[(A, A, A, A, A, A, A, A, A, A, A)] = F.sliding11(fa)
318-
def sliding12(implicit F: Foldable[F]): List[(A, A, A, A, A, A, A, A, A, A, A, A)] = F.sliding12(fa)
319-
def sliding13(implicit F: Foldable[F]): List[(A, A, A, A, A, A, A, A, A, A, A, A, A)] = F.sliding13(fa)
320-
def sliding14(implicit F: Foldable[F]): List[(A, A, A, A, A, A, A, A, A, A, A, A, A, A)] = F.sliding14(fa)
321-
def sliding15(implicit F: Foldable[F]): List[(A, A, A, A, A, A, A, A, A, A, A, A, A, A, A)] = F.sliding15(fa)
322-
def sliding16(implicit F: Foldable[F]): List[(A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A)] = F.sliding16(fa)
323-
def sliding17(implicit F: Foldable[F]): List[(A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A)] = F.sliding17(fa)
324-
def sliding18(implicit F: Foldable[F]): List[(A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A)] = F.sliding18(fa)
298+
def sliding2(implicit F: Foldable[F]): List[(A, A)] =
299+
F.sliding2(fa)
300+
def sliding3(implicit F: Foldable[F]): List[(A, A, A)] =
301+
F.sliding3(fa)
302+
def sliding4(implicit F: Foldable[F]): List[(A, A, A, A)] =
303+
F.sliding4(fa)
304+
def sliding5(implicit F: Foldable[F]): List[(A, A, A, A, A)] =
305+
F.sliding5(fa)
306+
def sliding6(implicit F: Foldable[F]): List[(A, A, A, A, A, A)] =
307+
F.sliding6(fa)
308+
def sliding7(implicit F: Foldable[F]): List[(A, A, A, A, A, A, A)] =
309+
F.sliding7(fa)
310+
def sliding8(implicit F: Foldable[F]): List[(A, A, A, A, A, A, A, A)] =
311+
F.sliding8(fa)
312+
def sliding9(implicit F: Foldable[F]): List[(A, A, A, A, A, A, A, A, A)] =
313+
F.sliding9(fa)
314+
def sliding10(implicit F: Foldable[F]): List[(A, A, A, A, A, A, A, A, A, A)] =
315+
F.sliding10(fa)
316+
def sliding11(implicit F: Foldable[F]): List[(A, A, A, A, A, A, A, A, A, A, A)] =
317+
F.sliding11(fa)
318+
def sliding12(implicit F: Foldable[F]): List[(A, A, A, A, A, A, A, A, A, A, A, A)] =
319+
F.sliding12(fa)
320+
def sliding13(implicit F: Foldable[F]): List[(A, A, A, A, A, A, A, A, A, A, A, A, A)] =
321+
F.sliding13(fa)
322+
def sliding14(implicit F: Foldable[F]): List[(A, A, A, A, A, A, A, A, A, A, A, A, A, A)] =
323+
F.sliding14(fa)
324+
def sliding15(implicit F: Foldable[F]): List[(A, A, A, A, A, A, A, A, A, A, A, A, A, A, A)] =
325+
F.sliding15(fa)
326+
def sliding16(implicit F: Foldable[F]): List[(A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A)] =
327+
F.sliding16(fa)
328+
def sliding17(implicit F: Foldable[F]): List[(A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A)] =
329+
F.sliding17(fa)
330+
def sliding18(implicit F: Foldable[F]): List[(A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A)] =
331+
F.sliding18(fa)
325332
def sliding19(implicit F: Foldable[F]): List[(A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A)] =
326333
F.sliding19(fa)
327334
def sliding20(implicit F: Foldable[F]): List[(A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A)] =

core/src/main/scala/cats/syntax/unorderedFoldable.scala

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,23 @@ trait UnorderedFoldableSyntax extends UnorderedFoldable.ToUnorderedFoldableOps {
2929

3030
final class UnorderedFoldableOps[F[_], A](private val fa: F[A]) extends AnyVal {
3131

32+
/**
33+
* test if `F[A]` contains an `A`, named contains_ to avoid conflict with existing contains which uses universal equality
34+
*
35+
* Example:
36+
* {{{
37+
* scala> import cats.implicits._
38+
*
39+
* scala> val l: List[Int] = List(1, 2, 3, 4)
40+
* scala> l.contains_(1)
41+
* res0: Boolean = true
42+
* scala> l.contains_(5)
43+
* res1: Boolean = false
44+
* }}}
45+
*/
46+
def contains_(v: A)(implicit ev: Eq[A], F: UnorderedFoldable[F]): Boolean =
47+
F.exists(fa)(a => ev.eqv(a, v))
48+
3249
/**
3350
* Count the number of elements in the structure that satisfy the given predicate.
3451
*

0 commit comments

Comments
 (0)