import { Disposable } from '@typed/disposable' import { provide, runPure } from '@typed/env' import { Capabilities, Effects, PureEffect, Return } from '../Effect' import { runEffect } from './runEffect' export function runEffects>(effect: A): Disposable export function runEffects>( effect: A, resources: Capabilities, onReturn?: (value: Return) => Disposable, ): Disposable export function runEffects>( effect: A, resources: Capabilities = {} as Capabilities, onReturn?: (value: Return) => Disposable, ): Disposable { return runPure( (a) => (onReturn ? onReturn(a) : Disposable.None), provide(runEffect(effect), resources), ) }