trait IOApp extends AnyRef
App
type that runs a cats.effect.IO. Shutdown occurs after
the IO
completes, as follows:
- If completed with ExitCode.Success
, the main method exits and
shutdown is handled by the platform.
- If completed with any other ExitCode, sys.exit
is called
with the specified code.
- If the IO
raises an error, the stack trace is printed to
standard error and sys.exit(1)
is called.
When a shutdown is requested via a signal, the IO
is canceled and
we wait for the IO
to release any resources. The process exits
with the numeric value of the signal plus 128.
import cats.effect._ import cats.syntax.all._ object MyApp extends IOApp { def run(args: List[String]): IO[ExitCode] = args.headOption match { case Some(name) => IO(println(s"Hello, ${name}.")).as(ExitCode.Success) case None => IO(System.err.println("Usage: MyApp name")).as(ExitCode(2)) } }
- Source
- IOApp.scala
- Alphabetic
- By Inheritance
- IOApp
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Abstract Value Members
- abstract def run(args: List[String]): IO[ExitCode]
Produces the
IO
to be run as an app.Produces the
IO
to be run as an app.- returns
the cats.effect.ExitCode the JVM exits with
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
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native() @HotSpotIntrinsicCandidate()
- implicit def contextShift: ContextShift[IO]
Provides an implicit ContextShift for the app.
Provides an implicit ContextShift for the app.
The default on top of the JVM is lazily constructed as a fixed thread pool based on number available of available CPUs (see
PoolUtils
).On top of JavaScript, the global execution context is used (i.e.
scala.concurrent.ExecutionContext.Implicits.global
).Users can override this value in order to customize the main thread-pool on top of the JVM, or to customize the run-loop on top of JavaScript.
- Attributes
- protected
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def equals(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef → Any
- def executionContext: ExecutionContext
Provides a default
ExecutionContext
for the app.Provides a default
ExecutionContext
for the app.The default on top of the JVM is lazily constructed as a fixed thread pool based on number available of available CPUs (see
PoolUtils
).On top of JavaScript, this will use the standard setTimeout.
- Attributes
- protected
- Note
This is the same ExecutionContext that backs the default implicit
,ContextShift
To use a different
ExecutionContext
, consider extendingIOApp.WithContext
, which will do it more comprehensively.
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @HotSpotIntrinsicCandidate()
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @HotSpotIntrinsicCandidate()
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- def main(args: Array[String]): Unit
The main method that runs the
IO
returned by run and exits the app with the resulting code on completion. - final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @HotSpotIntrinsicCandidate()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @HotSpotIntrinsicCandidate()
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- implicit def timer: Timer[IO]
Provides an implicit Timer for the app.
Provides an implicit Timer for the app.
Users can override this value in order to customize the underlying scheduler being used.
The default on top of the JVM uses an internal scheduler built with Java's Executors.newScheduledThreadPool (configured with one or two threads) and that defers the execution of the scheduled ticks (the bind continuations get shifted) to the app's contextShift.
On top of JavaScript the default timer will simply use the standard setTimeout.
- Attributes
- protected
- def toString(): String
- Definition Classes
- AnyRef → Any
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException]) @native()
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
Deprecated Value Members
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable]) @Deprecated
- Deprecated
This is the API documentation for the cats-effect library.
See the cats.effect package for a quick overview.
Links
Canonical documentation links:
Related Cats links (the core):