trait Arrow[F[_, _]] extends Category[F] with Strong[F]
Must obey the laws defined in cats.laws.ArrowLaws.
- Self Type
- Arrow[F]
- Source
- Arrow.scala
- Alphabetic
- By Inheritance
- Arrow
- Strong
- Profunctor
- Category
- Compose
- Serializable
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Abstract Value Members
- abstract def compose[A, B, C](f: F[B, C], g: F[A, B]): F[A, C]
- Definition Classes
- Compose
- abstract def first[A, B, C](fa: F[A, B]): F[(A, C), (B, C)]
Create a new
F
that takes two inputs, but only modifies the first inputCreate a new
F
that takes two inputs, but only modifies the first inputExample:
scala> import cats.implicits._ scala> import cats.arrow.Strong scala> val f: Int => Int = _ * 2 scala> val fab = Strong[Function1].first[Int,Int,Int](f) scala> fab((2,3)) res0: (Int, Int) = (4,3)
- Definition Classes
- Strong
- abstract def lift[A, B](f: (A) => B): F[A, B]
Lift a function into the context of an Arrow.
Lift a function into the context of an Arrow.
In the reference articles "Arrows are Promiscuous...", and in the corresponding Haskell library
Control.Arrow
, this function is calledarr
.
Concrete Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##: Int
- Definition Classes
- AnyRef → Any
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- def algebra[A]: Monoid[F[A, A]]
- def algebraK: MonoidK[[α]F[α, α]]
- def andThen[A, B, C](f: F[A, B], g: F[B, C]): F[A, C]
- Definition Classes
- Compose
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native()
- def dimap[A, B, C, D](fab: F[A, B])(f: (C) => A)(g: (B) => D): F[C, D]
Contramap on the first type parameter and map on the second type parameter
Contramap on the first type parameter and map on the second type parameter
Example:
scala> import cats.implicits._ scala> import cats.arrow.Profunctor scala> val fab: Double => Double = x => x + 0.3 scala> val f: Int => Double = x => x.toDouble / 2 scala> val g: Double => Double = x => x * 3 scala> val h = Profunctor[Function1].dimap(fab)(f)(g) scala> h(3) res0: Double = 5.4
- Definition Classes
- Arrow → Profunctor
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def equals(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef → Any
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable])
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- def id[A]: F[A, A]
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- def leftNarrow[A, B, AA <: A](fab: F[A, B]): F[AA, B]
Narrows A into a subtype AA.
Narrows A into a subtype AA. Example:
scala> import cats.syntax.profunctor._ scala> import cats.instances.function._ scala> scala> sealed trait Foo scala> case object Bar extends Foo scala> val x1: Foo => Int = _ => 1 scala> val x2: Bar.type => Int = x1.leftNarrow
- Definition Classes
- Profunctor
- def lmap[A, B, C](fab: F[A, B])(f: (C) => A): F[C, B]
contramap on the first type parameter
contramap on the first type parameter
- Definition Classes
- Profunctor
- def merge[A, B, C](f: F[A, B], g: F[A, C]): F[A, (B, C)]
Create a new computation
F
that merge outputs off
andg
both having the same inputCreate a new computation
F
that merge outputs off
andg
both having the same inputExample:
scala> import cats.implicits._ scala> val addEmpty: Int => Int = _ + 0 scala> val multiplyEmpty: Int => Double= _ * 1d scala> val f: Int => (Int, Double) = addEmpty &&& multiplyEmpty scala> f(1) res0: (Int, Double) = (1,1.0)
Note that the arrow laws do not guarantee the non-interference between the _effects_ of
f
andg
in the context of F. This means thatf &&& g
may not be equivalent tog &&& f
. - final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- def rightWiden[A, B, BB >: B](fab: F[A, B]): F[A, BB]
Widens B into a supertype BB.
Widens B into a supertype BB. Example:
scala> import cats.syntax.profunctor._ scala> import cats.instances.function._ scala> scala> sealed trait Foo scala> case object Bar extends Foo scala> val x1: Int => Bar.type = _ => Bar scala> val x2: Int => Foo = x1.rightWiden
- Definition Classes
- Profunctor
- def rmap[A, B, C](fab: F[A, B])(f: (B) => C): F[A, C]
map on the second type parameter
map on the second type parameter
- Definition Classes
- Profunctor
- def second[A, B, C](fa: F[A, B]): F[(C, A), (C, B)]
Create a new
F
that takes two inputs, but only modifies the second inputCreate a new
F
that takes two inputs, but only modifies the second inputExample:
scala> import cats.implicits._ scala> import cats.arrow.Strong scala> val f: Int => Int = _ * 2 scala> val fab = Strong[Function1].second[Int,Int,Int](f) scala> fab((2,3)) res0: (Int, Int) = (2,6)
- def split[A, B, C, D](f: F[A, B], g: F[C, D]): F[(A, C), (B, D)]
Create a new computation
F
that splits its input betweenf
andg
and combines the output of each.Create a new computation
F
that splits its input betweenf
andg
and combines the output of each.Example:
scala> import cats.implicits._ scala> import cats.arrow.Arrow scala> val toLong: Int => Long = _.toLong scala> val toDouble: Float => Double = _.toDouble scala> val f: ((Int, Float)) => (Long, Double) = Arrow[Function1].split(toLong, toDouble) scala> f((3, 4.0f)) res0: (Long, Double) = (3,4.0)
Note that the arrow laws do not guarantee the non-interference between the _effects_ of
f
andg
in the context of F. This means thatf *** g
may not be equivalent tog *** f
. - final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def toString(): String
- Definition Classes
- AnyRef → Any
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException]) @native()