All Downloads are FREE. Search and download functionalities are using the official Maven repository.

proptics.syntax.FoldableWithIndexSyntax.scala Maven / Gradle / Ivy

package proptics.syntax

import cats.{Eval, Monoid}

import proptics.indices.FoldableWithIndex

trait FoldableWithIndexSyntax {
  implicit final def foldableWithIndexOps[F[_], A](fa: F[A]): FoldableWithIndexOps[F, A] = FoldableWithIndexOps[F, A](fa)
}

final case class FoldableWithIndexOps[F[_], A](private val fa: F[A]) extends AnyVal {
  def foldMap[B](f: A => B)(implicit B: Monoid[B], ev: FoldableWithIndex[F, _]): B =
    ev.foldMap(fa)(f)

  def foldLeft[B](b: B)(f: (B, A) => B)(implicit ev: FoldableWithIndex[F, _]): B =
    ev.foldLeft(fa, b)(f)

  def foldRight[B](lb: Eval[B])(f: (A, Eval[B]) => Eval[B])(implicit ev: FoldableWithIndex[F, _]): Eval[B] =
    ev.foldRight(fa, lb)(f)

  def isEmpty[B](implicit ev: FoldableWithIndex[F, _]): Boolean =
    ev.isEmpty(fa)

  def foldMapWithIndex[I, B: Monoid](f: (A, I) => B)(implicit ev: FoldableWithIndex[F, I]): B =
    ev.foldMapWithIndex(f)(fa)

  def foldLeftWithIndex[I, B](f: (B, (A, I)) => B)(b: B)(implicit ev: FoldableWithIndex[F, I]): B =
    ev.foldLeftWithIndex(f)(fa, b)

  def foldRightWithIndex[I, B](f: ((A, I), Eval[B]) => Eval[B])(lb: Eval[B])(implicit ev: FoldableWithIndex[F, I]): Eval[B] =
    ev.foldRightWithIndex(f)(fa, lb)
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy