"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
    for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.IOverrideForkScope = exports.IGetForkScope = exports.ISupervise = exports.IRaceWith = exports.IFiberRefModify = exports.IFiberRefNew = exports.ISuspendPartial = exports.ISuspend = exports.IProvide = exports.ITracer = exports.IPlatform = exports.IRead = exports.IYield = exports.IDescriptor = exports.ICheckInterrupt = exports.IInterruptStatus = exports.IFork = exports.IFold = exports.IEffectAsync = exports.IEffectTotal = exports.IEffectPartial = exports.ICheckTracingStatus = exports.ITracingStatus = exports.ITrace = exports.ISucceed = exports.IFlatMap = exports.IFail = void 0;
const effect_1 = require("./effect");
class IFail extends effect_1.Base {
    constructor(fill, trace) {
        super();
        this.fill = fill;
        this.trace = trace;
        this._tag = "Fail";
    }
}
exports.IFail = IFail;
class IFlatMap extends effect_1.Base {
    constructor(val, f, trace) {
        super();
        this.val = val;
        this.f = f;
        this.trace = trace;
        this._tag = "FlatMap";
    }
}
exports.IFlatMap = IFlatMap;
class ISucceed extends effect_1.Base {
    constructor(val, trace) {
        super();
        this.val = val;
        this.trace = trace;
        this._tag = "Succeed";
    }
}
exports.ISucceed = ISucceed;
class ITrace extends effect_1.Base {
    constructor() {
        super();
        this._tag = "Trace";
    }
}
exports.ITrace = ITrace;
class ITracingStatus extends effect_1.Base {
    constructor(effect, flag) {
        super();
        this.effect = effect;
        this.flag = flag;
        this._tag = "TracingStatus";
    }
}
exports.ITracingStatus = ITracingStatus;
class ICheckTracingStatus extends effect_1.Base {
    constructor(f) {
        super();
        this.f = f;
        this._tag = "CheckTracingStatus";
    }
}
exports.ICheckTracingStatus = ICheckTracingStatus;
class IEffectPartial extends effect_1.Base {
    constructor(effect, onThrow, trace) {
        super();
        this.effect = effect;
        this.onThrow = onThrow;
        this.trace = trace;
        this._tag = "EffectPartial";
    }
}
exports.IEffectPartial = IEffectPartial;
class IEffectTotal extends effect_1.Base {
    constructor(effect, trace) {
        super();
        this.effect = effect;
        this.trace = trace;
        this._tag = "EffectTotal";
    }
}
exports.IEffectTotal = IEffectTotal;
class IEffectAsync extends effect_1.Base {
    constructor(register, blockingOn, trace) {
        super();
        this.register = register;
        this.blockingOn = blockingOn;
        this.trace = trace;
        this._tag = "EffectAsync";
    }
}
exports.IEffectAsync = IEffectAsync;
class IFold extends effect_1.Base {
    constructor(value, failure, apply, trace) {
        super();
        this.value = value;
        this.failure = failure;
        this.apply = apply;
        this.trace = trace;
        this._tag = "Fold";
    }
}
exports.IFold = IFold;
class IFork extends effect_1.Base {
    constructor(value, scope, reportFailure, trace) {
        super();
        this.value = value;
        this.scope = scope;
        this.reportFailure = reportFailure;
        this.trace = trace;
        this._tag = "Fork";
    }
}
exports.IFork = IFork;
class IInterruptStatus extends effect_1.Base {
    constructor(effect, flag, trace) {
        super();
        this.effect = effect;
        this.flag = flag;
        this.trace = trace;
        this._tag = "InterruptStatus";
    }
}
exports.IInterruptStatus = IInterruptStatus;
class ICheckInterrupt extends effect_1.Base {
    constructor(f, trace) {
        super();
        this.f = f;
        this.trace = trace;
        this._tag = "CheckInterrupt";
    }
}
exports.ICheckInterrupt = ICheckInterrupt;
class IDescriptor extends effect_1.Base {
    constructor(f, trace) {
        super();
        this.f = f;
        this.trace = trace;
        this._tag = "Descriptor";
    }
}
exports.IDescriptor = IDescriptor;
class IYield extends effect_1.Base {
    constructor() {
        super();
        this._tag = "Yield";
    }
}
exports.IYield = IYield;
class IRead extends effect_1.Base {
    constructor(f, trace) {
        super();
        this.f = f;
        this.trace = trace;
        this._tag = "Read";
    }
}
exports.IRead = IRead;
class IPlatform extends effect_1.Base {
    constructor(f, trace) {
        super();
        this.f = f;
        this.trace = trace;
        this._tag = "Platform";
    }
}
exports.IPlatform = IPlatform;
class ITracer extends effect_1.Base {
    constructor(f, trace) {
        super();
        this.f = f;
        this.trace = trace;
        this._tag = "Tracer";
    }
}
exports.ITracer = ITracer;
class IProvide extends effect_1.Base {
    constructor(r, next, trace) {
        super();
        this.r = r;
        this.next = next;
        this.trace = trace;
        this._tag = "Provide";
    }
}
exports.IProvide = IProvide;
class ISuspend extends effect_1.Base {
    constructor(factory, trace) {
        super();
        this.factory = factory;
        this.trace = trace;
        this._tag = "Suspend";
    }
}
exports.ISuspend = ISuspend;
class ISuspendPartial extends effect_1.Base {
    constructor(factory, onThrow, trace) {
        super();
        this.factory = factory;
        this.onThrow = onThrow;
        this.trace = trace;
        this._tag = "SuspendPartial";
    }
}
exports.ISuspendPartial = ISuspendPartial;
class IFiberRefNew extends effect_1.Base {
    constructor(initial, onFork, onJoin) {
        super();
        this.initial = initial;
        this.onFork = onFork;
        this.onJoin = onJoin;
        this._tag = "FiberRefNew";
    }
}
exports.IFiberRefNew = IFiberRefNew;
class IFiberRefModify extends effect_1.Base {
    constructor(fiberRef, f, trace) {
        super();
        this.fiberRef = fiberRef;
        this.f = f;
        this.trace = trace;
        this._tag = "FiberRefModify";
    }
}
exports.IFiberRefModify = IFiberRefModify;
class IRaceWith extends effect_1.Base {
    constructor(left, right, leftWins, rightWins, scope, trace) {
        super();
        this.left = left;
        this.right = right;
        this.leftWins = leftWins;
        this.rightWins = rightWins;
        this.scope = scope;
        this.trace = trace;
        this._tag = "RaceWith";
    }
}
exports.IRaceWith = IRaceWith;
class ISupervise extends effect_1.Base {
    constructor(effect, supervisor, trace) {
        super();
        this.effect = effect;
        this.supervisor = supervisor;
        this.trace = trace;
        this._tag = "Supervise";
    }
}
exports.ISupervise = ISupervise;
class IGetForkScope extends effect_1.Base {
    constructor(f, trace) {
        super();
        this.f = f;
        this.trace = trace;
        this._tag = "GetForkScope";
    }
}
exports.IGetForkScope = IGetForkScope;
class IOverrideForkScope extends effect_1.Base {
    constructor(effect, forkScope, trace) {
        super();
        this.effect = effect;
        this.forkScope = forkScope;
        this.trace = trace;
        this._tag = "OverrideForkScope";
    }
}
exports.IOverrideForkScope = IOverrideForkScope;
__exportStar(require("./effect"), exports);
//# sourceMappingURL=primitives.js.map