import { ReaderTaskEither } from 'fp-ts/lib/ReaderTaskEither.js';
import * as z from 'zod';
import { ILogObj, Logger } from 'tslog';
/**
 * Construct a ReaderTaskEither from a function that performs side effects and
 * may throw.
 */
export declare const tryCatchIO: <Env, Err, Ret>(f: (env: Env) => Ret, onThrow: (reason: unknown) => Err) => ReaderTaskEither<Env, Err, Ret>;
/**
 * Convert a promise that may reject into a ReaderTaskEither.
 */
export declare const tryCatch: <Env, Err, Ret>(f: (env: Env) => Promise<Ret>, onThrow: (reason: unknown) => Err) => ReaderTaskEither<Env, Err, Ret>;
/**
 * Given an error and a condition, throw the error when the condition is false.
 */
export declare const guard: <Env, Err>(err: Err) => (cond: boolean) => ReaderTaskEither<Env, Err, void>;
export declare const liftZodParseResult: <R, E, I, O>(r: z.SafeParseReturnType<I, O>, onThrow: (err: z.ZodError<I>) => E) => ReaderTaskEither<R, E, O>;
/**
 * Assuming the reader environment is a string-indexable object, return the field
 * in the environment of the given key.
 */
export declare const askRecordField: <P extends string, R extends { [key in P]: unknown; }, Err = never>(key: P) => ReaderTaskEither<R, Err, R[P]>;
/**
 * Returns the logger stored within RTE env.
 */
export declare const askLogger: <R extends {
    logger: LoggerType;
}, LoggerType extends Logger<LogObjType>, LogObjType extends ILogObj = ILogObj, Err = never>() => ReaderTaskEither<R, Err, LoggerType>;
/**
 * Pass a function accepting the logger stored within RTE env
 * to call it with the logger.
 */
export declare const useLogger: <R extends {
    logger: LoggerType;
}, B, LoggerType extends Logger<LogObjType>, LogObjType extends ILogObj = ILogObj, Err = never>(f: (l: LoggerType) => B) => ReaderTaskEither<R, Err, void>;
/**
 * Pass a function accepting the logger stored within RTE env
 * to call it with the logger.
 * It will passthrough the given task either action
 * - to be used within monadic actions chains.
 */
export declare const tapLogger: <R extends {
    logger: LoggerType;
}, A, B, LoggerType extends Logger<LogObjType>, LogObjType extends ILogObj = ILogObj, Err = never>(f: (logger: LoggerType, x: A) => B) => (_: ReaderTaskEither<R, Err, A>) => ReaderTaskEither<R, Err, A>;
/**
 * Returns a sublogger of the logger stored within RTE env.
 */
export declare const askSublogger: <R extends {
    logger: Logger<LogObjType>;
}, Err = never, LogObjType extends ILogObj = ILogObj>(loggerName: string) => ReaderTaskEither<R, Err, Logger<LogObjType>>;
/**
 * Execute a computation in a modified environment.
 */
export declare const withRTE: <R1, R2, E1, E2>(mapErr: (_: E2) => E1, mapEnv: (_: R1) => R2) => <A>(f: ReaderTaskEither<R2, E2, A>) => ReaderTaskEither<R1, E1, A>;
