import { Ref } from "@effect/core/io/Ref/definition";
import { Semaphore } from "@effect/core/io/Semaphore/definition";
import { Effect } from "@effect/core/io/Effect/definition";
import { Tuple } from "@tsplus/stdlib/data/Tuple/definition";
import { Maybe } from "@tsplus/stdlib/data/Maybe/definition";
import { RefSym, SynchronizedSym } from "@effect/core/io/Ref/definition";
export interface SynchronizedInternal<A> extends Ref.Synchronized<A> {
    readonly ref: Ref<A>;
    readonly semaphore: Semaphore;
}
export declare const SynchronizedInternal: {
    [RefSym]: typeof RefSym;
    [SynchronizedSym]: typeof SynchronizedSym;
    /**
     * Reads the value from the `Ref`.
     */
    get<A>(this: SynchronizedInternal<A>, __tsplusTrace?: string): import("../../../Effect").Effect.UIO<A>;
    /**
     * Atomically modifies the `Ref.Synchronized` with the specified function,
     * which computes a return value for the modification. This is a more
     * powerful version of `update`.
     */
    modifyEffect<R, E, A_1, B>(this: SynchronizedInternal<A_1>, f: (a: A_1) => import("../../../Effect").Effect<R, E, import("@tsplus/stdlib/data/Tuple").Tuple<[B, A_1]>>, __tsplusTrace?: string): import("../../../Effect").Effect<R, E, B>;
    /**
     * Writes a new value to the `Ref`, with a guarantee of immediate
     * consistency (at some cost to performance).
     */
    set<A_2>(this: SynchronizedInternal<A_2>, a: A_2, __tsplusTrace?: string): import("../../../Effect").Effect.UIO<void>;
    /**
     * Writes a new value to the `Ref` without providing a guarantee of
     * immediate consistency.
     */
    setAsync<A_3>(this: SynchronizedInternal<A_3>, a: A_3, __tsplusTrace?: string): import("../../../Effect").Effect.UIO<void>;
    /**
     * Atomically modifies the `Ref.Synchronized` with the specified function,
     * returning the value immediately before modification.
     */
    getAndUpdateEffect<R_1, E_1, A_4>(this: SynchronizedInternal<A_4>, f: (a: A_4) => import("../../../Effect").Effect<R_1, E_1, A_4>, __tsplusTrace?: string): import("../../../Effect").Effect<R_1, E_1, A_4>;
    /**
     * Atomically modifies the `Ref.Synchronized` with the specified partial
     * function, returning the value immediately before modification. If the
     * function is undefined on the current value it doesn't change it.
     */
    getAndUpdateSomeEffect<R_2, E_2, A_5>(this: SynchronizedInternal<A_5>, pf: (a: A_5) => import("@tsplus/stdlib/data/Maybe").Maybe<import("../../../Effect").Effect<R_2, E_2, A_5>>, __tsplusTrace?: string): import("../../../Effect").Effect<R_2, E_2, A_5>;
    modify<A_6, B_1>(this: SynchronizedInternal<A_6>, f: (a: A_6) => import("@tsplus/stdlib/data/Tuple").Tuple<[B_1, A_6]>, __tsplusTrace?: string): import("../../../Effect").Effect.UIO<B_1>;
    /**
     * Atomically modifies the `Ref.Synchronized` with the specified function,
     * which computes a return value for the modification if the function is
     * defined in the current value otherwise it returns a default value. This
     * is a more powerful version of `updateSome`.
     */
    modifySomeEffect<R_3, E_3, A_7, B_2>(this: SynchronizedInternal<A_7>, fallback: B_2, pf: (a: A_7) => import("@tsplus/stdlib/data/Maybe").Maybe<import("../../../Effect").Effect<R_3, E_3, import("@tsplus/stdlib/data/Tuple").Tuple<[B_2, A_7]>>>, __tsplusTrace?: string): import("../../../Effect").Effect<R_3, E_3, B_2>;
    /**
     * Atomically modifies the `Ref.Synchronized` with the specified function.
     */
    updateEffect<R_4, E_4, A_8>(this: SynchronizedInternal<A_8>, f: (a: A_8) => import("../../../Effect").Effect<R_4, E_4, A_8>, __tsplusTrace?: string): import("../../../Effect").Effect<R_4, E_4, void>;
    /**
     * Atomically modifies the `Ref.Synchronized` with the specified function,
     * returning the value immediately after modification.
     */
    updateAndGetEffect<R_5, E_5, A_9>(this: SynchronizedInternal<A_9>, f: (a: A_9) => import("../../../Effect").Effect<R_5, E_5, A_9>, __tsplusTrace?: string): import("../../../Effect").Effect<R_5, E_5, A_9>;
    /**
     * Atomically modifies the `Ref.Synchronized` with the specified partial
     * function. If the function is undefined on the current value it doesn't
     * change it.
     */
    updateSomeEffect<R_6, E_6, A_10>(this: SynchronizedInternal<A_10>, pf: (a: A_10) => import("@tsplus/stdlib/data/Maybe").Maybe<import("../../../Effect").Effect<R_6, E_6, A_10>>, __tsplusTrace?: string): import("../../../Effect").Effect<R_6, E_6, void>;
    /**
     * Atomically modifies the `Ref.Synchronized` with the specified partial
     * function. If the function is undefined on the current value it returns
     * the old value without changing it.
     */
    updateSomeAndGetEffect<R_7, E_7, A_11>(this: SynchronizedInternal<A_11>, pf: (a: A_11) => import("@tsplus/stdlib/data/Maybe").Maybe<import("../../../Effect").Effect<R_7, E_7, A_11>>, __tsplusTrace?: string): import("../../../Effect").Effect<R_7, E_7, A_11>;
    getAndSet<A_12>(this: import("@effect/core/io/Ref/definition").Ref<A_12>, a: A_12, __tsplusTrace?: string | undefined): import("../../../Effect").Effect.UIO<A_12>;
    getAndUpdate<A_13>(this: import("@effect/core/io/Ref/definition").Ref<A_13>, f: (a: A_13) => A_13, __tsplusTrace?: string | undefined): import("../../../Effect").Effect.UIO<A_13>;
    getAndUpdateSome<A_14>(this: import("@effect/core/io/Ref/definition").Ref<A_14>, pf: (a: A_14) => import("@tsplus/stdlib/data/Maybe").Maybe<A_14>, __tsplusTrace?: string | undefined): import("../../../Effect").Effect.UIO<A_14>;
    modifySome<B_3, A_15>(this: import("@effect/core/io/Ref/definition").Ref<A_15>, fallback: B_3, pf: (a: A_15) => import("@tsplus/stdlib/data/Maybe").Maybe<import("@tsplus/stdlib/data/Tuple").Tuple<[B_3, A_15]>>, __tsplusTrace?: string | undefined): import("../../../Effect").Effect.UIO<B_3>;
    update<A_16>(this: import("@effect/core/io/Ref/definition").Ref<A_16>, f: (a: A_16) => A_16, __tsplusTrace?: string | undefined): import("../../../Effect").Effect.UIO<void>;
    updateAndGet<A_17>(this: import("@effect/core/io/Ref/definition").Ref<A_17>, f: (a: A_17) => A_17, __tsplusTrace?: string | undefined): import("../../../Effect").Effect.UIO<A_17>;
    updateSome<A_18>(this: import("@effect/core/io/Ref/definition").Ref<A_18>, pf: (a: A_18) => import("@tsplus/stdlib/data/Maybe").Maybe<A_18>, __tsplusTrace?: string | undefined): import("../../../Effect").Effect.UIO<void>;
    updateSomeAndGet<A_19>(this: import("@effect/core/io/Ref/definition").Ref<A_19>, pf: (a: A_19) => import("@tsplus/stdlib/data/Maybe").Maybe<A_19>, __tsplusTrace?: string | undefined): import("../../../Effect").Effect.UIO<A_19>;
};
//# sourceMappingURL=SynchronizedInternal.d.ts.map