trait Arrow[F[_, _]] extends Category[F] with Strong[F]
Must obey the laws defined in cats.laws.ArrowLaws.
- Self Type
- Arrow[F]
- Annotations
- @implicitNotFound( ... ) @typeclass( ... , ... )
- Source
- Arrow.scala
- Alphabetic
- By Inheritance
- Arrow
- Strong
- Profunctor
- Category
- Compose
- Serializable
- Serializable
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
Abstract Value Members
-
abstract
def
compose[A, B, C](f: F[B, C], g: F[A, B]): F[A, C]
- Definition Classes
- Compose
- Annotations
- @op( "<<<" , true )
-
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
- Annotations
- @op( ">>>" , true )
-
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
-
def
clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native() @IntrinsicCandidate()
-
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: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @IntrinsicCandidate()
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @IntrinsicCandidate()
- 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
.- Annotations
- @op( "&&&" , true )
-
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @IntrinsicCandidate()
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @IntrinsicCandidate()
-
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
.- Annotations
- @op( "***" , true )
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
-
def
toString(): String
- Definition Classes
- AnyRef → Any
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )