scalaz

Nondeterminism

trait Nondeterminism[F[_]] extends Monad[F]

A context supporting nondeterministic choice. Unlike Monad.bind, which imposes a total order on the sequencing of effects throughout a computation, the choose and chooseAny operations let us partially order the sequencing of effects. Canonical instances are concurrent.Future and concurrent.Task, which run their arguments in parallel, returning whichever comes back 'first'.

TODO - laws

Self Type
Nondeterminism[F]
Source
Nondeterminism.scala
Linear Supertypes
Monad[F], Bind[F], Applicative[F], Apply[F], Functor[F], AnyRef, Any
Ordering
  1. Alphabetic
  2. By inheritance
Inherited
  1. Nondeterminism
  2. Monad
  3. Bind
  4. Applicative
  5. Apply
  6. Functor
  7. AnyRef
  8. Any
  1. Hide All
  2. Show all
Learn more about member selection
Visibility
  1. Public
  2. All

Type Members

  1. trait ApplicativeLaw extends FunctorLaw

    Definition Classes
    Applicative
  2. trait FunctorLaw extends AnyRef

    Definition Classes
    Functor
  3. trait MonadLaw extends ApplicativeLaw

    Definition Classes
    Monad

Abstract Value Members

  1. abstract 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)).

    Definition Classes
    Bind
  2. abstract def chooseAny[A](head: F[A], tail: Seq[F[A]]): F[(A, Seq[F[A]])]

  3. abstract def point[A](a: ⇒ A): F[A]

    Definition Classes
    Applicative

Concrete Value Members

  1. final def !=(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  2. final def !=(arg0: Any): Boolean

    Definition Classes
    Any
  3. final def ##(): Int

    Definition Classes
    AnyRef → Any
  4. final def ==(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  5. final def ==(arg0: Any): Boolean

    Definition Classes
    Any
  6. def aggregate[A, M](fs: Seq[F[A]])(m: Monoid[A]): F[A]

    Nondeterministically sequence fs, collecting the results using a Monoid.

  7. def aggregateCommutative[A, M](fs: Seq[F[A]])(m: Monoid[A]): F[A]

    Nondeterministically sequence fs, collecting the results using a commutative Monoid.

  8. def ap[A, B](fa: ⇒ F[A])(f: ⇒ F[(A) ⇒ B]): F[B]

    Definition Classes
    BindApply
  9. def ap2[A, B, C](fa: ⇒ F[A], fb: ⇒ F[B])(f: F[(A, B) ⇒ C]): F[C]

    Definition Classes
    Apply
  10. def ap3[A, B, C, D](fa: ⇒ F[A], fb: ⇒ F[B], fc: ⇒ F[C])(f: F[(A, B, C) ⇒ D]): F[D]

    Definition Classes
    Apply
  11. 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]

    Definition Classes
    Apply
  12. 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]

    Definition Classes
    Apply
  13. 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]

    Definition Classes
    Apply
  14. 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]

    Definition Classes
    Apply
  15. 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]

    Definition Classes
    Apply
  16. def apF[A, B](f: ⇒ F[(A) ⇒ B]): (F[A]) ⇒ F[B]

    Flipped variant of ap.

    Flipped variant of ap.

    Definition Classes
    Apply
  17. def applicativeLaw: ApplicativeLaw

    Definition Classes
    Applicative
  18. val applicativeSyntax: ApplicativeSyntax[F]

    Definition Classes
    Applicative
  19. def apply[A, B](fa: F[A])(f: (A) ⇒ B): F[B]

    Alias for map.

    Alias for map.

    Definition Classes
    Functor
  20. 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]

    Definition Classes
    Apply
  21. 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]

    Definition Classes
    Apply
  22. 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]

    Definition Classes
    Apply
  23. def apply2[A, B, C](fa: ⇒ F[A], fb: ⇒ F[B])(f: (A, B) ⇒ C): F[C]

    Definition Classes
    ApplicativeApply
  24. def apply3[A, B, C, D](fa: ⇒ F[A], fb: ⇒ F[B], fc: ⇒ F[C])(f: (A, B, C) ⇒ D): F[D]

    Definition Classes
    Apply
  25. 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]

    Definition Classes
    Apply
  26. 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]

    Definition Classes
    Apply
  27. 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]

    Definition Classes
    Apply
  28. 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]

    Definition Classes
    Apply
  29. 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]

    Definition Classes
    Apply
  30. 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]

    Definition Classes
    Apply
  31. val applySyntax: ApplySyntax[F]

    Definition Classes
    Apply
  32. final def asInstanceOf[T0]: T0

    Definition Classes
    Any
  33. val bindSyntax: BindSyntax[F]

    Definition Classes
    Bind
  34. def both[A, B](a: F[A], b: F[B]): F[(A, B)]

    Obtain results from both a and b, nondeterministically ordering their effects.

  35. def choose[A, B](a: F[A], b: F[B]): F[\/[(A, F[B]), (F[A], B)]]

    A commutative operation which chooses nondeterministically to obtain a value from either a or b.

    A commutative operation which chooses nondeterministically to obtain a value from either a or b. If a 'wins', a 'residual' context for b is returned; if b wins, a residual context for a is returned. The residual is useful for various instances like Future, which may race the two computations and require a residual to ensure the result of the 'losing' computation is not discarded.

    This function can be defined in terms of chooseAny or vice versa. The default implementation calls chooseAny with a two-element list and uses the Functor for F to fix up types.

  36. def chooseAny[A](a: Seq[F[A]]): Option[F[(A, Seq[F[A]])]]

    A commutative operation which chooses nondeterministically to obtain a value from any of the elements of as.

    A commutative operation which chooses nondeterministically to obtain a value from any of the elements of as. In the language of posets, this constructs an antichain (a set of elements which are all incomparable) in the effect poset for this computation.

    returns

    None, if the input is empty.

  37. def clone(): AnyRef

    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  38. def compose[G[_]](implicit G0: Applicative[G]): Applicative[[α]F[G[α]]]

    The composition of Applicatives F and G, [x]F[G[x]], is an Applicative

    The composition of Applicatives F and G, [x]F[G[x]], is an Applicative

    Definition Classes
    Applicative
  39. 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

    Definition Classes
    Apply
  40. 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

    Definition Classes
    Functor
  41. def counzip[A, B](a: \/[F[A], F[B]]): F[\/[A, B]]

    Definition Classes
    Functor
  42. final def eq(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  43. def equals(arg0: Any): Boolean

    Definition Classes
    AnyRef → Any
  44. def filterM[A](l: List[A])(f: (A) ⇒ F[Boolean]): F[List[A]]

    Filter l according to an applicative predicate.

    Filter l according to an applicative predicate.

    Definition Classes
    Applicative
  45. def finalize(): Unit

    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  46. def flip: Applicative[F]

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

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

    Definition Classes
    Applicative
  47. def fpair[A](fa: F[A]): F[(A, A)]

    Twin all As in fa.

    Twin all As in fa.

    Definition Classes
    Functor
  48. 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.

    Definition Classes
    Functor
  49. def functorLaw: FunctorLaw

    Definition Classes
    Functor
  50. val functorSyntax: FunctorSyntax[F]

    Definition Classes
    Functor
  51. def gather[A](fs: Seq[F[A]]): F[List[A]]

    Nondeterministically gather results from the given sequence of actions.

    Nondeterministically gather results from the given sequence of actions. This function is the nondeterministic analogue of sequence and should behave identically to sequence so long as there is no interaction between the effects being gathered. However, unlike sequence, which decides on a total order of effects, the effects in a gather are unordered with respect to each other.

    Although the effects are unordered, we ensure the order of results matches the order of the input sequence. Also see gatherUnordered.

  52. def gatherUnordered[A](fs: Seq[F[A]]): F[List[A]]

    Nondeterministically gather results from the given sequence of actions.

    Nondeterministically gather results from the given sequence of actions. The resulting list will be arbitrarily reordered, depending on the order results come back in a sequence of calls to chooseAny.

    To preserve the order of the output list while allowing nondetermininstic ordering of effects, use gather.

  53. final def getClass(): Class[_]

    Definition Classes
    AnyRef → Any
  54. def hashCode(): Int

    Definition Classes
    AnyRef → Any
  55. def ifM[B](value: F[Boolean], ifTrue: ⇒ F[B], ifFalse: ⇒ F[B]): F[B]

    if lifted into a binding.

    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.

    Definition Classes
    Bind
  56. final def isInstanceOf[T0]: Boolean

    Definition Classes
    Any
  57. 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].

    Definition Classes
    Bind
  58. def lift[A, B](f: (A) ⇒ B): (F[A]) ⇒ F[B]

    Lift f into F.

    Lift f into F.

    Definition Classes
    Functor
  59. 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]

    Definition Classes
    Apply
  60. 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]

    Definition Classes
    Apply
  61. 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]

    Definition Classes
    Apply
  62. def lift2[A, B, C](f: (A, B) ⇒ C): (F[A], F[B]) ⇒ F[C]

    Definition Classes
    Apply
  63. def lift3[A, B, C, D](f: (A, B, C) ⇒ D): (F[A], F[B], F[C]) ⇒ F[D]

    Definition Classes
    Apply
  64. def lift4[A, B, C, D, E](f: (A, B, C, D) ⇒ E): (F[A], F[B], F[C], F[D]) ⇒ F[E]

    Definition Classes
    Apply
  65. 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]

    Definition Classes
    Apply
  66. 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]

    Definition Classes
    Apply
  67. 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]

    Definition Classes
    Apply
  68. 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]

    Definition Classes
    Apply
  69. 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]

    Definition Classes
    Apply
  70. 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].

    Definition Classes
    MonadApplicativeFunctor
  71. def mapBoth[A, B, C](a: F[A], b: F[B])(f: (A, B) ⇒ C): F[C]

    Apply a function to the results of a and b, nondeterminstically ordering their effects.

  72. 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.

    Definition Classes
    Functor
  73. def monadLaw: MonadLaw

    Definition Classes
    Monad
  74. val monadSyntax: MonadSyntax[F]

    Definition Classes
    Monad
  75. final def ne(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  76. val nondeterminismSyntax: NondeterminismSyntax[F]

  77. final def notify(): Unit

    Definition Classes
    AnyRef
  78. final def notifyAll(): Unit

    Definition Classes
    AnyRef
  79. def product[G[_]](implicit G0: Applicative[G]): Applicative[[α](F[α], G[α])]

    The product of Applicatives F and G, [x](F[x], G[x]]), is an Applicative

    The product of Applicatives F and G, [x](F[x], G[x]]), is an Applicative

    Definition Classes
    Applicative
  80. 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

    Definition Classes
    Apply
  81. 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

    Definition Classes
    Functor
  82. def pure[A](a: ⇒ A): F[A]

    Definition Classes
    Applicative
  83. def replicateM[A](n: Int, fa: F[A]): F[List[A]]

    Performs the action n times, returning the list of results.

    Performs the action n times, returning the list of results.

    Definition Classes
    Applicative
  84. def replicateM_[A](n: Int, fa: F[A]): F[Unit]

    Performs the action n times, returning nothing.

    Performs the action n times, returning nothing.

    Definition Classes
    Applicative
  85. def sequence[A, G[_]](as: G[F[A]])(implicit arg0: Traverse[G]): F[G[A]]

    Definition Classes
    Applicative
  86. def sequence1[A, G[_]](as: G[F[A]])(implicit arg0: Traverse1[G]): F[G[A]]

    Definition Classes
    Apply
  87. 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.

    Definition Classes
    Functor
  88. 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.

    Definition Classes
    Functor
  89. final def synchronized[T0](arg0: ⇒ T0): T0

    Definition Classes
    AnyRef
  90. def toString(): String

    Definition Classes
    AnyRef → Any
  91. def traverse[A, G[_], B](value: G[A])(f: (A) ⇒ F[B])(implicit G: Traverse[G]): F[G[B]]

    Definition Classes
    Applicative
  92. def traverse1[A, G[_], B](value: G[A])(f: (A) ⇒ F[B])(implicit G: Traverse1[G]): F[G[B]]

    Definition Classes
    Apply
  93. def tuple2[A, B](fa: ⇒ F[A], fb: ⇒ F[B]): F[(A, B)]

    Definition Classes
    Apply
  94. def tuple3[A, B, C](fa: ⇒ F[A], fb: ⇒ F[B], fc: F[C]): F[(A, B, C)]

    Definition Classes
    Apply
  95. def tuple4[A, B, C, D](fa: ⇒ F[A], fb: ⇒ F[B], fc: ⇒ F[C], fd: ⇒ F[D]): F[(A, B, C, D)]

    Definition Classes
    Apply
  96. 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)]

    Definition Classes
    Apply
  97. 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.

    Definition Classes
    Functor
  98. final def wait(): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  99. final def wait(arg0: Long, arg1: Int): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  100. final def wait(arg0: Long): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws( ... )

Deprecated Value Members

  1. def map2[A, B, C](fa: ⇒ F[A], fb: ⇒ F[B])(f: (A, B) ⇒ C): F[C]

    Definition Classes
    Apply
    Annotations
    @deprecated
    Deprecated

    (Since version 7) given F: Apply[F] use F(a,b)(f) instead, or given implicitly[Apply[F]], use ^(a,b)(f)

  2. def map3[A, B, C, D](fa: ⇒ F[A], fb: ⇒ F[B], fc: ⇒ F[C])(f: (A, B, C) ⇒ D): F[D]

    Definition Classes
    Apply
    Annotations
    @deprecated
    Deprecated

    (Since version 7) given F: Apply[F] use F(a,b,c)(f) instead, or given implicitly[Apply[F]], use ^(a,b,c)(f)

  3. def map4[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]

    Definition Classes
    Apply
    Annotations
    @deprecated
    Deprecated

    (Since version 7) given F: Apply[F] use F(a,b,c,d)(f) instead, or given implicitly[Apply[F]], use ^(a,b,c,d)(f)

  4. def zip: Zip[F]

    scalaz.Zip derived from tuple2.

    scalaz.Zip derived from tuple2.

    Definition Classes
    Apply
    Annotations
    @deprecated
    Deprecated

    (Since version 7.1.0) Apply#zip produces unlawful instances

Inherited from Monad[F]

Inherited from Bind[F]

Inherited from Applicative[F]

Inherited from Apply[F]

Inherited from Functor[F]

Inherited from AnyRef

Inherited from Any

Ungrouped