object IO extends IOCompanionPlatform with IOLowPriorityImplicits
- Source
- IO.scala
- Alphabetic
- By Inheritance
- IO
- IOLowPriorityImplicits
- IOCompanionPlatform
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
Type Members
-
class
IOMonoid[A] extends IOSemigroup[A] with Monoid[IO[A]]
- Attributes
- protected
-
class
IOSemigroup[A] extends Semigroup[IO[A]]
- Attributes
- protected
- Definition Classes
- IOLowPriorityImplicits
-
class
IOSemigroupK extends SemigroupK[IO]
- Attributes
- protected
-
type
Par[A] = T[IO, A]
Newtype encoding for an
IO
datatype that has acats.Applicative
capable of doing parallel processing inap
andmap2
, needed for implementingcats.Parallel
.Newtype encoding for an
IO
datatype that has acats.Applicative
capable of doing parallel processing inap
andmap2
, needed for implementingcats.Parallel
.Helpers are provided for converting back and forth in
Par.apply
for wrapping anyIO
value andPar.unwrap
for unwrapping.The encoding is based on the "newtypes" project by Alexander Konovalov, chosen because it's devoid of boxing issues and a good choice until opaque types will land in Scala.
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
- implicit def alignForIO: Align[IO]
-
def
apply[A](thunk: ⇒ A): IO[A]
Suspends a synchronous side effect in
IO
.Suspends a synchronous side effect in
IO
.Alias for
IO.delay(body)
. -
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
- def async[A](k: ((Either[Throwable, A]) ⇒ Unit) ⇒ IO[Option[IO[Unit]]]): IO[A]
- implicit def asyncForIO: kernel.Async[IO]
-
def
async_[A](k: ((Either[Throwable, A]) ⇒ Unit) ⇒ Unit): IO[A]
Suspends an asynchronous side effect in
IO
.Suspends an asynchronous side effect in
IO
.The given function will be invoked during evaluation of the
IO
to "schedule" the asynchronous callback, where the callback is the parameter passed to that function. Only the first invocation of the callback will be effective! All subsequent invocations will be silently dropped.As a quick example, you can use this function to perform a parallel computation given an
ExecutorService
:def fork[A](body: => A, exc: ExecutorService): IO[A] = IO async_ { cb => exc.execute(new Runnable { def run() = try cb(Right(body)) catch { case NonFatal(t) => cb(Left(t)) } }) }
The
fork
function will do exactly what it sounds like: take a thunk and anExecutorService
and run that thunk on the thread pool. Or rather, it will produce anIO
which will do those things when run; it does *not* schedule the thunk until the resultingIO
is run! Note that there is no thread blocking in this implementation; the resultingIO
encapsulates the callback in a pure and monadic fashion without using threads.This function can be thought of as a safer, lexically-constrained version of
Promise
, whereIO
is like a safer, lazy version ofFuture
.- See also
-
def
blocking[A](thunk: ⇒ A): IO[A]
- Definition Classes
- IOCompanionPlatform
- def both[A, B](left: IO[A], right: IO[B]): IO[(A, B)]
- def bothOutcome[A, B](left: IO[A], right: IO[B]): IO[(OutcomeIO[A], OutcomeIO[B])]
- def bracketFull[A, B](acquire: (Poll[IO]) ⇒ IO[A])(use: (A) ⇒ IO[B])(release: (A, OutcomeIO[B]) ⇒ IO[Unit]): IO[B]
- def canceled: IO[Unit]
- def cede: IO[Unit]
-
def
clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()
- implicit val consoleForIO: Console[IO]
-
def
cont[K, R](body: Cont[IO, K, R]): IO[R]
This is a low-level API which is meant for implementors, please use
background
,start
,async
, orDeferred
instead, depending on the use case -
def
defer[A](thunk: ⇒ IO[A]): IO[A]
Suspends a synchronous side effect which produces an
IO
inIO
.Suspends a synchronous side effect which produces an
IO
inIO
.This is useful for trampolining (i.e. when the side effect is conceptually the allocation of a stack frame). Any exceptions thrown by the side effect will be caught and sequenced into the
IO
. - def deferred[A]: IO[Deferred[IO, A]]
-
def
delay[A](thunk: ⇒ A): IO[A]
Suspends a synchronous side effect in
IO
.Suspends a synchronous side effect in
IO
.Any exceptions thrown by the effect will be caught and sequenced into the
IO
. -
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
eval[A](fa: Eval[A]): IO[A]
Lifts an
Eval
intoIO
.Lifts an
Eval
intoIO
.This function will preserve the evaluation semantics of any actions that are lifted into the pure
IO
. EagerEval
instances will be converted into thunk-lessIO
(i.e. eagerIO
), while lazy eval and memoized will be executed as such. - def executionContext: IO[ExecutionContext]
-
def
finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
-
def
fromCompletableFuture[A](fut: IO[CompletableFuture[A]]): IO[A]
- Definition Classes
- IOCompanionPlatform
-
def
fromEither[A](e: Either[Throwable, A]): IO[A]
Lifts an
Either[Throwable, A]
into theIO[A]
context, raising the throwable if it exists. -
def
fromFuture[A](fut: IO[Future[A]]): IO[A]
Constructs an
IO
which evaluates the givenFuture
and produces the result (or failure).Constructs an
IO
which evaluates the givenFuture
and produces the result (or failure).Because
Future
eagerly evaluates, as well as because it memoizes, this function takes its parameter as anIO
, which could be lazily evaluated. If this laziness is appropriately threaded back to the definition site of theFuture
, it ensures that the computation is fully managed byIO
and thus referentially transparent.Example:
// Lazy evaluation, equivalent with by-name params IO.fromFuture(IO(f)) // Eager evaluation, for pure futures IO.fromFuture(IO.pure(f))
Roughly speaking, the following identities hold:
IO.fromFuture(IO(f)).unsafeToFuture() === f // true-ish (except for memoization) IO.fromFuture(IO(ioa.unsafeToFuture())) === ioa // true
- See also
-
def
fromOption[A](o: Option[A])(orElse: ⇒ Throwable): IO[A]
Lifts an
Option[A]
into theIO[A]
context, raising the throwable if the option is empty. -
def
fromTry[A](t: Try[A]): IO[A]
Lifts an
Try[A]
into theIO[A]
context, raising the throwable if it exists. -
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
def
interruptible[A](many: Boolean)(thunk: ⇒ A): IO[A]
- Definition Classes
- IOCompanionPlatform
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- implicit def monoidForIO[A](implicit arg0: Monoid[A]): Monoid[IO[A]]
- def monotonic: IO[FiniteDuration]
-
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
never[A]: IO[A]
A non-terminating
IO
, alias forasync(_ => ())
. -
def
none[A]: IO[Option[A]]
An IO that contains an empty Option.
An IO that contains an empty Option.
- See also
some for the non-empty Option variant
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
def
parSequenceN[T[_], A](n: Int)(tma: T[IO[A]])(implicit arg0: Traverse[T]): IO[T[A]]
Like
Parallel.parSequence
, but limits the degree of parallelism. -
def
parTraverseN[T[_], A, B](n: Int)(ta: T[A])(f: (A) ⇒ IO[B])(implicit arg0: Traverse[T]): IO[T[B]]
Like
Parallel.parTraverse
, but limits the degree of parallelism. - implicit def parallelForIO: Aux[IO, Par]
-
def
print[A](a: A)(implicit S: Show[A] = Show.fromToString[A]): IO[Unit]
Prints a value to the standard output using the implicit
cats.Show
instance.Prints a value to the standard output using the implicit
cats.Show
instance.- a
value to be printed to the standard output
- See also
cats.effect.std.Console
for more standard input, output and error operations
-
def
println[A](a: A)(implicit S: Show[A] = Show.fromToString[A]): IO[Unit]
Prints a value to the standard output followed by a new line using the implicit
cats.Show
instance.Prints a value to the standard output followed by a new line using the implicit
cats.Show
instance.- a
value to be printed to the standard output
- See also
cats.effect.std.Console
for more standard input, output and error operations
-
def
pure[A](value: A): IO[A]
Lifts a pure value into
IO
.Lifts a pure value into
IO
.This should only be used if the value in question has "already" been computed! In other words, something like
IO.pure(readLine)
is most definitely not the right thing to do! However,IO.pure(42)
is correct and will be more efficient (when evaluated) thanIO(42)
, due to avoiding the allocation of extra thunks. -
def
race[A, B](left: IO[A], right: IO[B]): IO[Either[A, B]]
Run two IO tasks concurrently, and return the first to finish, either in success or error.
Run two IO tasks concurrently, and return the first to finish, either in success or error. The loser of the race is canceled.
The two tasks are executed in parallel, the winner being the first that signals a result.
As an example see IO.timeout and IO.timeoutTo
Also see racePair for a version that does not cancel the loser automatically on successful results.
-
def
racePair[A, B](left: IO[A], right: IO[B]): IO[Either[(OutcomeIO[A], FiberIO[B]), (FiberIO[A], OutcomeIO[B])]]
Run two IO tasks concurrently, and returns a pair containing both the winner's successful value and the loser represented as a still-unfinished task.
Run two IO tasks concurrently, and returns a pair containing both the winner's successful value and the loser represented as a still-unfinished task.
If the first task completes in error, then the result will complete in error, the other task being canceled.
On usage the user has the option of canceling the losing task, this being equivalent with plain race:
val ioA: IO[A] = ??? val ioB: IO[B] = ??? IO.racePair(ioA, ioB).flatMap { case Left((a, fiberB)) => fiberB.cancel.map(_ => a) case Right((fiberA, b)) => fiberA.cancel.map(_ => b) }
See race for a simpler version that cancels the loser immediately.
-
def
raiseError[A](t: Throwable): IO[A]
Constructs an
IO
which sequences the specified exception.Constructs an
IO
which sequences the specified exception.If this
IO
is run usingunsafeRunSync
orunsafeRunTimed
, the exception will be thrown. This exception can be "caught" (or rather, materialized into value-space) using theattempt
method.- See also
-
def
raiseUnless(cond: Boolean)(e: ⇒ Throwable): IO[Unit]
Returns
raiseError
whencond
is false, otherwise IO.unitReturns
raiseError
whencond
is false, otherwise IO.unitval tooMany = 5 val x: Int = ??? IO.raiseUnless(x < tooMany)(new IllegalArgumentException("Too many"))
Example: -
def
raiseWhen(cond: Boolean)(e: ⇒ Throwable): IO[Unit]
Returns
raiseError
when thecond
is true, otherwiseIO.unit
Returns
raiseError
when thecond
is true, otherwiseIO.unit
val tooMany = 5 val x: Int = ??? IO.raiseWhen(x >= tooMany)(new IllegalArgumentException("Too many"))
Example: -
def
readLine: IO[String]
Reads a line as a string from the standard input using the platform's default charset, as per
java.nio.charset.Charset.defaultCharset()
.Reads a line as a string from the standard input using the platform's default charset, as per
java.nio.charset.Charset.defaultCharset()
.The effect can raise a
java.io.EOFException
if no input has been consumed before the EOF is observed. This should never happen with the standard input, unless it has been replaced with a finitejava.io.InputStream
throughjava.lang.System#setIn
or similar.- returns
an IO effect that describes reading the user's input from the standard input as a string
- See also
cats.effect.std.Console#readLineWithCharset
for reading using a customjava.nio.charset.Charset
- def realTime: IO[FiniteDuration]
-
def
realTimeInstant: IO[Instant]
- Definition Classes
- IOCompanionPlatform
- def ref[A](a: A): IO[Ref[IO, A]]
-
implicit
def
semigroupForIO[A](implicit arg0: Semigroup[A]): Semigroup[IO[A]]
- Definition Classes
- IOLowPriorityImplicits
- implicit val semigroupKForIO: SemigroupK[IO]
- implicit def showForIO[A](implicit arg0: Show[A]): Show[IO[A]]
-
implicit
def
showForIONoPure[A]: Show[IO[A]]
- Definition Classes
- IOLowPriorityImplicits
-
def
sleep(delay: FiniteDuration): IO[Unit]
Creates an asynchronous task that on evaluation sleeps for the specified duration, emitting a notification on completion.
Creates an asynchronous task that on evaluation sleeps for the specified duration, emitting a notification on completion.
This is the pure, non-blocking equivalent to:
Thread.sleep
(JVM)ScheduledExecutorService.schedule
(JVM)setTimeout
(JavaScript)
You can combine it with
flatMap
to create delayed tasks:val timeout = IO.sleep(10.seconds).flatMap { _ => IO.raiseError(new TimeoutException) }
The created task is cancelable and so it can be used safely in race conditions without resource leakage.
- returns
a new asynchronous and cancelable
IO
that will sleep for the specified duration and then finally emit a tick
-
def
some[A](a: A): IO[Option[A]]
An IO that contains some Option of the given value.
An IO that contains some Option of the given value.
- See also
none for the empty Option variant
- def stub: IO[Nothing]
-
def
suspend[A](hint: Type)(thunk: ⇒ A): IO[A]
- Definition Classes
- IOCompanionPlatform
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
-
def
toString(): String
- Definition Classes
- AnyRef → Any
- def trace: IO[Trace]
- def uncancelable[A](body: (Poll[IO]) ⇒ IO[A]): IO[A]
- def unique: IO[Token]
-
def
unit: IO[Unit]
Alias for
IO.pure(())
. -
def
unlessA(cond: Boolean)(action: ⇒ IO[Unit]): IO[Unit]
Returns the given argument if
cond
is false, otherwiseIO.Unit
Returns the given argument if
cond
is false, otherwiseIO.Unit
- See also
IO.whenA for the inverse
IO.raiseWhen for conditionally raising an error
-
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
- @throws( ... ) @native()
-
def
whenA(cond: Boolean)(action: ⇒ IO[Unit]): IO[Unit]
Returns the given argument if
cond
is true, otherwiseIO.Unit
Returns the given argument if
cond
is true, otherwiseIO.Unit
- See also
IO.unlessA for the inverse
IO.raiseWhen for conditionally raising an error