provide<R, E, S> method

ZIO<R, E, S> provide<R, E, S>(
  1. Layer<E, S> layer
)

Implementation

ZIO<R, E, S> provide<R, E, S>(Layer<E, S> layer) => EIO<E, S>.from((ctx) {
      if (_cache.containsKey(layer)) {
        return (_cache[layer] as EIO<E, S>).unsafeRun(ctx);
      }

      final build = layer._make.provide(_scope).memoize.runSyncOrThrow();
      _cache[layer] = build;
      return build.unsafeRun(ctx._withLayerContext(this));
    }) //
        .lift<R>()
        .tap((_) => ZIO(() {
              _services[layer.tag] = _;
            }));