sealed abstract class Free[S[_], A] extends AnyRef
A free monad for a type constructor S
.
Binding is done using the heap instead of the stack, allowing tail-call elimination.
- Source
- Free.scala
- Alphabetic
- By Inheritance
- Free
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
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
-
final
def
>>=[B](f: (A) ⇒ Free[S, B]): Free[S, B]
Alias for
flatMap
-
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
-
final
def
bounce(f: (S[Free[S, A]]) ⇒ Free[S, A])(implicit S: Functor[S]): Free[S, A]
Runs a single step, using a function that extracts the resumption from its suspension functor.
-
def
clone(): AnyRef
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @native() @throws( ... )
-
def
collect[B](implicit ev: =:=[Free[S, A], Source[B, A]]): (Vector[B], A)
Runs a
Source
all the way to the end, tail-recursively, collecting the produced values. -
def
drain[E, B](source: Source[E, B])(implicit ev: =:=[Free[S, A], Sink[E, A]]): (A, B)
Feed the given source to this
Sink
. -
def
drive[E, B](sink: Sink[Option[E], B])(implicit ev: =:=[Free[S, A], Source[E, A]]): (A, B)
Drive this
Source
with the given Sink. -
def
duplicateF: Free[[β$14$]Free[S, β$14$], A]
Duplication in
Free
as a comonad in the endofunctor category. -
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
extendF[T[_]](f: ~>[[β$17$]Free[S, β$17$], T]): Free[T, A]
Extension in
Free
as a comonad in the endofunctor category. -
def
extractF(implicit S: Monad[S]): S[A]
Extraction from
Free
as a comonad in the endofunctor category. -
def
feed[E](ss: Stream[E])(implicit ev: =:=[Free[S, A], Sink[E, A]]): A
Feed the given stream to this
Source
. -
def
finalize(): Unit
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
-
final
def
flatMap[B](f: (A) ⇒ Free[S, B]): Free[S, B]
Binds the given continuation to the result of this computation.
-
final
def
flatMapSuspension[T[_]](f: ~>[S, [β$8$]Free[T, β$8$]]): Free[T, A]
Substitutes a free monad over the given functor into the suspension functor of this program.
Substitutes a free monad over the given functor into the suspension functor of this program.
Free
is a monad in an endofunctor category and this is its monadic bind. -
final
def
fold[B](r: (A) ⇒ B, s: (S[Free[S, A]]) ⇒ B)(implicit S: Functor[S]): B
Catamorphism.
Catamorphism. Run the first given function if Return, otherwise, the second given function.
-
final
def
foldMap[M[_]](f: ~>[S, M])(implicit M: Monad[M]): M[A]
Catamorphism for
Free
.Catamorphism for
Free
. Runs to completion, mapping the suspension with the given transformation at each step and accumulating into the monadM
. - final def foldMapRec[M[_]](f: ~>[S, M])(implicit M: Applicative[M], B: BindRec[M]): M[A]
-
final
def
foldRight[G[_]](z: ~>[Id.Id, G])(f: ~>[[α]S[G[α]], G])(implicit S: Functor[S]): G[A]
Folds this free recursion to the right using the given natural transformations.
-
final
def
foldRun[B](b: B)(f: ~>[[α](B, S[α]), [β$10$](B, β$10$)]): (B, A)
Runs to completion, allowing the resumption function to thread an arbitrary state of type
B
.Runs to completion, allowing the resumption function to thread an arbitrary state of type
B
.- Annotations
- @tailrec()
-
final
def
foldRunM[M[_], B](b: B)(f: ~>[[α](B, S[α]), [α]M[(B, α)]])(implicit M0: Applicative[M], M1: BindRec[M]): M[(B, A)]
Variant of
foldRun
that allows to interleave effectM
at each step. -
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
final
def
go(f: (S[Free[S, A]]) ⇒ Free[S, A])(implicit S: Functor[S]): A
Runs to completion, using a function that extracts the resumption from its suspension functor.
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- final def map[B](f: (A) ⇒ B): Free[S, B]
-
final
def
mapFirstSuspension(f: ~>[S, S]): Free[S, A]
Modifies the first suspension with the given natural transformation.
-
final
def
mapSuspension[T[_]](f: ~>[S, T]): Free[T, A]
Changes the suspension functor by the given natural transformation.
-
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()
-
final
def
resume(implicit S: Functor[S]): \/[S[Free[S, A]], A]
Evaluates a single layer of the free monad *
-
final
def
resumeC: \/[Coyoneda[S, Free[S, A]], A]
Evaluates a single layer of the free monad *
Evaluates a single layer of the free monad *
- Annotations
- @tailrec()
-
final
def
run(implicit ev: =:=[Free[S, A], Trampoline[A]]): A
Runs a trampoline all the way to the end, tail-recursively.
-
final
def
runM[M[_]](f: (S[Free[S, A]]) ⇒ M[Free[S, A]])(implicit S: Functor[S], M: Monad[M]): M[A]
Runs to completion, using a function that maps the resumption from
S
to a monadM
.Runs to completion, using a function that maps the resumption from
S
to a monadM
.- Since
7.0.1
-
final
def
runRecM[M[_]](f: (S[Free[S, A]]) ⇒ M[Free[S, A]])(implicit S: Functor[S], M: Applicative[M], B: BindRec[M]): M[A]
Run Free using constant stack.
-
final
def
step: Free[S, A]
Evaluate one layer in the free monad, re-associating any left-nested binds to the right and pulling the first suspension to the top.
Evaluate one layer in the free monad, re-associating any left-nested binds to the right and pulling the first suspension to the top.
- Annotations
- @tailrec()
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
- def toFreeT: FreeT[S, Id.Id, A]
-
def
toString(): String
- Definition Classes
- AnyRef → Any
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @throws( ... )
-
final
def
zap[G[_], B](fs: Cofree[G, (A) ⇒ B])(implicit d: Zap[S, G]): B
Applies a function in a comonad to the corresponding value in this monad, annihilating both.
-
final
def
zapWith[G[_], B, C](bs: Cofree[G, B])(f: (A, B) ⇒ C)(implicit d: Zap[S, G]): C
Applies a function
f
to a value in this monad and a corresponding value in the dual comonad, annihilating both. -
final
def
zipWith[B, C](tb: Free[S, B])(f: (A, B) ⇒ C): Free[S, C]
Interleave this computation with another, combining the results with the given function.