Patch Changes
-
#2461
8fdfda6
Thanks @tim-smart! - add Inspectable.toStringUnknown/stringifyCircular -
#2462
607b2e7
Thanks @tim-smart! - remove handled errors from Effect.retryOrElse -
#2461
8fdfda6
Thanks @tim-smart! - improve formatting of Runtime failures -
#2415
8206caf
Thanks @tim-smart! - add Iterable moduleThis module shares many apis compared to "effect/ReadonlyArray", but is fully lazy.
import { Iterable, pipe } from "effect"; // Only 5 items will be generated & transformed pipe( Iterable.range(1, 100), Iterable.map((i) => `item ${i}`), Iterable.take(5), );
-
#2438
7ddd654
Thanks @mikearnaldi! - Support Heterogeneous Effects in Effect Iterable apisIncluding:
Effect.allSuccesses
Effect.firstSuccessOf
Effect.mergeAll
Effect.reduceEffect
Effect.raceAll
Effect.forkAll
For example:
import { Effect } from "effect"; class Foo extends Effect.Tag("Foo")<Foo, 3>() {} class Bar extends Effect.Tag("Bar")<Bar, 4>() {} // const program: Effect.Effect<(1 | 2 | 3 | 4)[], never, Foo | Bar> export const program = Effect.allSuccesses([ Effect.succeed(1 as const), Effect.succeed(2 as const), Foo, Bar, ]);
The above is now possible while before it was expecting all Effects to conform to the same type
-
#2438
7ddd654
Thanks @mikearnaldi! - add Effect.filterMap apiWhich allows you to filter and map an Iterable of Effects in one step.
import { Effect, Option } from "effect"; // resolves with `["even: 2"] Effect.filterMap( [Effect.succeed(1), Effect.succeed(2), Effect.succeed(3)], (i) => (i % 2 === 0 ? Option.some(`even: ${i}`) : Option.none()), );
-
#2461
8fdfda6
Thanks @tim-smart! - use Inspectable.toStringUnknown for absurd runtime errors -
#2460
f456ba2
Thanks @tim-smart! - use const type parameter for Config.withDefaultWhich ensures that the fallback value type is not widened for literals.