github Effect-TS/effect effect@2.4.17

latest releases: @effect/sql-sqlite-wasm@0.11.5, @effect/sql-sqlite-react-native@0.14.5, @effect/sql-sqlite-node@0.12.5...
5 months ago

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 module

    This 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 apis

    Including:

    • 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 api

    Which 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.withDefault

    Which ensures that the fallback value type is not widened for literals.

Don't miss a new effect release

NewReleases is sending notifications on new releases.