BindRec

trait BindRec[F[_]] extends Bind[F]

scalaz.Bind capable of using constant stack space when doing recursive binds.

Implementations of tailrecM should not make recursive calls without the @tailrec annotation.

Based on Phil Freeman's work on stack safety in PureScript, described in Stack Safety for Free.

Companion
object
trait Bind[F]
trait BindParent[F]
trait Apply[F]
trait ApplyParent[F]
trait Functor[F]
class Object
trait Matchable
class Any

Type members

Classlikes

trait BindRecLaw extends BindLaw

Inherited classlikes

trait ApplyLaw
Inherited from
Apply
trait BindLaw
Inherited from
Bind
Inherited from
Functor

Value members

Abstract methods

def tailrecM[A, B](f: A => F[A \/ B])(a: A): F[B]

Concrete methods

override
def forever[A, B](fa: F[A]): F[B]
Definition Classes
def product[G[_]](implicit G0: BindRec[G]): BindRec[[α] =>> (F[α], G[α])]

The product of BindRec F and G, [x](F[x], G[x]]), is a BindRec

The product of BindRec F and G, [x](F[x], G[x]]), is a BindRec

Inherited methods

override
def ap[A, B](fa: => F[A])(f: => F[A => B]): F[B]
Definition Classes
Inherited from
Bind
def ap2[A, B, C](fa: => F[A], fb: => F[B])(f: F[(A, B) => C]): F[C]
Inherited from
Apply
def ap3[A, B, C, D](fa: => F[A], fb: => F[B], fc: => F[C])(f: F[(A, B, C) => D]): F[D]
Inherited from
Apply
def ap4[A, B, C, D, E](fa: => F[A], fb: => F[B], fc: => F[C], fd: => F[D])(f: F[(A, B, C, D) => E]): F[E]
Inherited from
Apply
def ap5[A, B, C, D, E, R](fa: => F[A], fb: => F[B], fc: => F[C], fd: => F[D], fe: => F[E])(f: F[(A, B, C, D, E) => R]): F[R]
Inherited from
Apply
def ap6[A, B, C, D, E, FF, R](fa: => F[A], fb: => F[B], fc: => F[C], fd: => F[D], fe: => F[E], ff: => F[FF])(f: F[(A, B, C, D, E, FF) => R]): F[R]
Inherited from
Apply
def ap7[A, B, C, D, E, FF, G, R](fa: => F[A], fb: => F[B], fc: => F[C], fd: => F[D], fe: => F[E], ff: => F[FF], fg: => F[G])(f: F[(A, B, C, D, E, FF, G) => R]): F[R]
Inherited from
Apply
def ap8[A, B, C, D, E, FF, G, H, R](fa: => F[A], fb: => F[B], fc: => F[C], fd: => F[D], fe: => F[E], ff: => F[FF], fg: => F[G], fh: => F[H])(f: F[(A, B, C, D, E, FF, G, H) => R]): F[R]
Inherited from
Apply
def apF[A, B](f: => F[A => B]): F[A] => F[B]

Flipped variant of ap.

Flipped variant of ap.

Inherited from
Apply
def apply[A, B](fa: F[A])(f: A => B): F[B]

Alias for map.

Alias for map.

Inherited from
Functor
def apply10[A, B, C, D, E, FF, G, H, I, J, R](fa: => F[A], fb: => F[B], fc: => F[C], fd: => F[D], fe: => F[E], ff: => F[FF], fg: => F[G], fh: => F[H], fi: => F[I], fj: => F[J])(f: (A, B, C, D, E, FF, G, H, I, J) => R): F[R]
Inherited from
Apply
def apply11[A, B, C, D, E, FF, G, H, I, J, K, R](fa: => F[A], fb: => F[B], fc: => F[C], fd: => F[D], fe: => F[E], ff: => F[FF], fg: => F[G], fh: => F[H], fi: => F[I], fj: => F[J], fk: => F[K])(f: (A, B, C, D, E, FF, G, H, I, J, K) => R): F[R]
Inherited from
Apply
def apply12[A, B, C, D, E, FF, G, H, I, J, K, L, R](fa: => F[A], fb: => F[B], fc: => F[C], fd: => F[D], fe: => F[E], ff: => F[FF], fg: => F[G], fh: => F[H], fi: => F[I], fj: => F[J], fk: => F[K], fl: => F[L])(f: (A, B, C, D, E, FF, G, H, I, J, K, L) => R): F[R]
Inherited from
Apply
def apply2[A, B, C](fa: => F[A], fb: => F[B])(f: (A, B) => C): F[C]
Inherited from
Apply
def apply3[A, B, C, D](fa: => F[A], fb: => F[B], fc: => F[C])(f: (A, B, C) => D): F[D]
Inherited from
Apply
def apply4[A, B, C, D, E](fa: => F[A], fb: => F[B], fc: => F[C], fd: => F[D])(f: (A, B, C, D) => E): F[E]
Inherited from
Apply
def apply5[A, B, C, D, E, R](fa: => F[A], fb: => F[B], fc: => F[C], fd: => F[D], fe: => F[E])(f: (A, B, C, D, E) => R): F[R]
Inherited from
Apply
def apply6[A, B, C, D, E, FF, R](fa: => F[A], fb: => F[B], fc: => F[C], fd: => F[D], fe: => F[E], ff: => F[FF])(f: (A, B, C, D, E, FF) => R): F[R]
Inherited from
Apply
def apply7[A, B, C, D, E, FF, G, R](fa: => F[A], fb: => F[B], fc: => F[C], fd: => F[D], fe: => F[E], ff: => F[FF], fg: => F[G])(f: (A, B, C, D, E, FF, G) => R): F[R]
Inherited from
Apply
def apply8[A, B, C, D, E, FF, G, H, R](fa: => F[A], fb: => F[B], fc: => F[C], fd: => F[D], fe: => F[E], ff: => F[FF], fg: => F[G], fh: => F[H])(f: (A, B, C, D, E, FF, G, H) => R): F[R]
Inherited from
Apply
def apply9[A, B, C, D, E, FF, G, H, I, R](fa: => F[A], fb: => F[B], fc: => F[C], fd: => F[D], fe: => F[E], ff: => F[FF], fg: => F[G], fh: => F[H], fi: => F[I])(f: (A, B, C, D, E, FF, G, H, I) => R): F[R]
Inherited from
Apply
def applyApplicative: Applicative[[α] =>> F[α] \/ α]

Add a unit to any Apply to form an Applicative.

Add a unit to any Apply to form an Applicative.

Inherited from
Apply
Inherited from
Apply
def bicompose[G[_, _] : Bifunctor]: Bifunctor[[α, β] =>> F[G[α, β]]]

The composition of Functor F and Bifunctor G, [x, y]F[G[x, y]], is a Bifunctor

The composition of Functor F and Bifunctor G, [x, y]F[G[x, y]], is a Bifunctor

Inherited from
Functor
def bind[A, B](fa: F[A])(f: A => F[B]): F[B]

Equivalent to join(map(fa)(f)).

Equivalent to join(map(fa)(f)).

Inherited from
Bind
Inherited from
Bind
def compose[G[_]](implicit G0: Apply[G]): Apply[[α] =>> F[G[α]]]

The composition of Applys F and G, [x]F[G[x]], is a Apply

The composition of Applys F and G, [x]F[G[x]], is a Apply

Inherited from
Apply
def compose[G[_]](implicit G0: Functor[G]): Functor[[α] =>> F[G[α]]]

The composition of Functors F and G, [x]F[G[x]], is a Functor

The composition of Functors F and G, [x]F[G[x]], is a Functor

Inherited from
Functor
def counzip[A, B](a: F[A] \/ F[B]): F[A \/ B]
Inherited from
Functor
def discardLeft[A, B](fa: => F[A], fb: => F[B]): F[B]

Combine fa and fb according to Apply[F] with a function that discards the A(s)

Combine fa and fb according to Apply[F] with a function that discards the A(s)

Inherited from
ApplyParent
def discardRight[A, B](fa: => F[A], fb: => F[B]): F[A]

Combine fa and fb according to Apply[F] with a function that discards the B(s)

Combine fa and fb according to Apply[F] with a function that discards the B(s)

Inherited from
ApplyParent
def flip: Apply[F]

An Apply for F in which effects happen in the opposite order.

An Apply for F in which effects happen in the opposite order.

Inherited from
ApplyParent
def fpair[A](fa: F[A]): F[(A, A)]

Twin all As in fa.

Twin all As in fa.

Inherited from
Functor
def fproduct[A, B](fa: F[A])(f: A => B): F[(A, B)]

Pair all As in fa with the result of function application.

Pair all As in fa with the result of function application.

Inherited from
Functor
Inherited from
Functor
def icompose[G[_]](implicit G0: Contravariant[G]): Contravariant[[α] =>> F[G[α]]]

The composition of Functor F and Contravariant G, [x]F[G[x]], is contravariant.

The composition of Functor F and Contravariant G, [x]F[G[x]], is contravariant.

Inherited from
Functor
def ifM[B](value: F[Boolean], ifTrue: => F[B], ifFalse: => F[B]): F[B]

if lifted into a binding. Unlike lift3((t,c,a)=>if(t)c else a), this will only include context from the chosen of ifTrue and ifFalse, not the other.

if lifted into a binding. Unlike lift3((t,c,a)=>if(t)c else a), this will only include context from the chosen of ifTrue and ifFalse, not the other.

Inherited from
Bind
def join[A](ffa: F[F[A]]): F[A]

Sequence the inner F of FFA after the outer F, forming a single F[A].

Sequence the inner F of FFA after the outer F, forming a single F[A].

Inherited from
Bind
def lift[A, B](f: A => B): F[A] => F[B]

Lift f into F.

Lift f into F.

Inherited from
Functor
def lift10[A, B, C, D, E, FF, G, H, I, J, R](f: (A, B, C, D, E, FF, G, H, I, J) => R): (F[A], F[B], F[C], F[D], F[E], F[FF], F[G], F[H], F[I], F[J]) => F[R]
Inherited from
Apply
def lift11[A, B, C, D, E, FF, G, H, I, J, K, R](f: (A, B, C, D, E, FF, G, H, I, J, K) => R): (F[A], F[B], F[C], F[D], F[E], F[FF], F[G], F[H], F[I], F[J], F[K]) => F[R]
Inherited from
Apply
def lift12[A, B, C, D, E, FF, G, H, I, J, K, L, R](f: (A, B, C, D, E, FF, G, H, I, J, K, L) => R): (F[A], F[B], F[C], F[D], F[E], F[FF], F[G], F[H], F[I], F[J], F[K], F[L]) => F[R]
Inherited from
Apply
def lift2[A, B, C](f: (A, B) => C): (F[A], F[B]) => F[C]
Inherited from
Apply
def lift3[A, B, C, D](f: (A, B, C) => D): (F[A], F[B], F[C]) => F[D]
Inherited from
Apply
def lift4[A, B, C, D, E](f: (A, B, C, D) => E): (F[A], F[B], F[C], F[D]) => F[E]
Inherited from
Apply
def lift5[A, B, C, D, E, R](f: (A, B, C, D, E) => R): (F[A], F[B], F[C], F[D], F[E]) => F[R]
Inherited from
Apply
def lift6[A, B, C, D, E, FF, R](f: (A, B, C, D, E, FF) => R): (F[A], F[B], F[C], F[D], F[E], F[FF]) => F[R]
Inherited from
Apply
def lift7[A, B, C, D, E, FF, G, R](f: (A, B, C, D, E, FF, G) => R): (F[A], F[B], F[C], F[D], F[E], F[FF], F[G]) => F[R]
Inherited from
Apply
def lift8[A, B, C, D, E, FF, G, H, R](f: (A, B, C, D, E, FF, G, H) => R): (F[A], F[B], F[C], F[D], F[E], F[FF], F[G], F[H]) => F[R]
Inherited from
Apply
def lift9[A, B, C, D, E, FF, G, H, I, R](f: (A, B, C, D, E, FF, G, H, I) => R): (F[A], F[B], F[C], F[D], F[E], F[FF], F[G], F[H], F[I]) => F[R]
Inherited from
Apply
def map[A, B](fa: F[A])(f: A => B): F[B]

Lift f into F and apply to F[A].

Lift f into F and apply to F[A].

Inherited from
Functor
def mapply[A, B](a: A)(f: F[A => B]): F[B]

Lift apply(a), and apply the result to f.

Lift apply(a), and apply the result to f.

Inherited from
Functor
def mproduct[A, B](fa: F[A])(f: A => F[B]): F[(A, B)]

Pair A with the result of function application.

Pair A with the result of function application.

Inherited from
Bind
def product[G[_]](implicit G0: Bind[G]): Bind[[α] =>> (F[α], G[α])]

The product of Bind F and G, [x](F[x], G[x]]), is a Bind

The product of Bind F and G, [x](F[x], G[x]]), is a Bind

Inherited from
Bind
def product[G[_]](implicit G0: Apply[G]): Apply[[α] =>> (F[α], G[α])]

The product of Applys F and G, [x](F[x], G[x]]), is a Apply

The product of Applys F and G, [x](F[x], G[x]]), is a Apply

Inherited from
Apply
def product[G[_]](implicit G0: Functor[G]): Functor[[α] =>> (F[α], G[α])]

The product of Functors F and G, [x](F[x], G[x]]), is a Functor

The product of Functors F and G, [x](F[x], G[x]]), is a Functor

Inherited from
Functor
def sequence1[A, G[_] : Traverse1](as: G[F[A]]): F[G[A]]
Inherited from
Apply
def strengthL[A, B](a: A, f: F[B]): F[(A, B)]

Inject a to the left of Bs in f.

Inject a to the left of Bs in f.

Inherited from
Functor
def strengthR[A, B](f: F[A], b: B): F[(A, B)]

Inject b to the right of As in f.

Inject b to the right of As in f.

Inherited from
Functor
def traverse1[A, G[_], B](value: G[A])(f: A => F[B])(implicit G: Traverse1[G]): F[G[B]]
Inherited from
Apply
def tuple2[A, B](fa: => F[A], fb: => F[B]): F[(A, B)]
Inherited from
Apply
def tuple3[A, B, C](fa: => F[A], fb: => F[B], fc: => F[C]): F[(A, B, C)]
Inherited from
Apply
def tuple4[A, B, C, D](fa: => F[A], fb: => F[B], fc: => F[C], fd: => F[D]): F[(A, B, C, D)]
Inherited from
Apply
def tuple5[A, B, C, D, E](fa: => F[A], fb: => F[B], fc: => F[C], fd: => F[D], fe: => F[E]): F[(A, B, C, D, E)]
Inherited from
Apply
def void[A](fa: F[A]): F[Unit]

Empty fa of meaningful pure values, preserving its structure.

Empty fa of meaningful pure values, preserving its structure.

Inherited from
Functor
def widen[A, B](fa: F[A])(implicit ev: Liskov[A, B]): F[B]

Functors are covariant by nature, so we can treat an F[A] as an F[B] if A is a subtype of B.

Functors are covariant by nature, so we can treat an F[A] as an F[B] if A is a subtype of B.

Inherited from
Functor
def xmap[A, B](fa: F[A], f: A => B, g: B => A): F[B]
Inherited from
Functor
def xmapb[A, B](ma: F[A])(b: Bijection[A, B]): F[B]

Converts ma to a value of type F[B] using the provided bijection.

Converts ma to a value of type F[B] using the provided bijection.

Inherited from
InvariantFunctor
def xmapi[A, B](ma: F[A])(iso: IsoSet[A, B]): F[B]

Converts ma to a value of type F[B] using the provided isomorphism.

Converts ma to a value of type F[B] using the provided isomorphism.

Inherited from
InvariantFunctor

Concrete fields

Inherited fields

Inherited from
Apply
Inherited from
Bind
Inherited from
Functor