Skip to content

IO<Operation> ​

The IO container is for isolating side effects in your program. This container is lazy and will not be evaluated until the unwrap method is called.

IO constructor ​

You can create an IO by calling the of constructor

ts
const fetch = IO.of(fetch('http://localhost:8080/api/users')) // IO(Promise<Users>)

const aNumber = IO.of(3) // IO(3)

Methods ​

The IO container exposes several methods for value manipulation

.map(fn) ​

ts
IO<T>.map<R>(fn: (input: T) => R): IO<R>
ts
const ioValue = IO.of(5);
const newValue = ioValue.map(x => x * 2); // IO(10)

const ioString = IO.of("hello");
const upperCaseValue = ioString.map(str => str.toUpperCase()); // IO("HELLO")

.flatMap(fn) ​

ts
IO<T>.flatMap<R>(fn: (input: T) => IO<R>): IO<R>

Transforms the value inside the IO into another IO and flattens the result.

ts
const ioValue = IO.of(5);
const newValue = ioValue.flatMap(x => IO.of(x * 2)); // IO(10)

const ioString = IO.of("hello");
const upperCaseValue = ioString.flatMap(str => IO.of(str.toUpperCase())); // IO("HELLO")

.unwrap() ​

ts
IO<T>.unwrap(): T

Computes and returns the value inside the IO.

ts
const ioValue = IO.of(5);
console.log(ioValue.unwrap()); // 5

const ioString = IO.of("hello");
console.log(ioString.unwrap()); // "hello"

.toMaybe() ​

ts
IO<T>.toMaybe(): maybe<T>

Converts the IO to a maybe.

ts
const ioValue = IO.of(5);
const maybeValue = ioValue.toMaybe(); // Some(5)

const ioNull = IO.of(null);
const maybeNull = ioNull.toMaybe(); // None