"use strict"
Object.defineProperty(exports, "__esModule", { value: true })
exports.awaitConst =
  exports.await_ =
  exports.done =
  exports.Await =
  exports.AwaitTypeId =
  exports.Done =
  exports.DoneTypeId =
  exports.concrete =
  exports.MergeDecision =
  exports.MergeDecisionTypeId =
  exports._Z =
  exports._E =
  exports._Z0 =
  exports._E0 =
  exports._R =
  exports.RightDone =
  exports.RightDoneTypeId =
  exports.LeftDone =
  exports.LeftDoneTypeId =
  exports.BothRunning =
  exports.BothRunningTypeId =
    void 0
exports.BothRunningTypeId = Symbol()
class BothRunning {
  constructor(left, right) {
    this.left = left
    this.right = right
    this._typeId = exports.BothRunningTypeId
  }
}
exports.BothRunning = BothRunning
exports.LeftDoneTypeId = Symbol()
class LeftDone {
  constructor(f) {
    this.f = f
    this._typeId = exports.LeftDoneTypeId
  }
}
exports.LeftDone = LeftDone
exports.RightDoneTypeId = Symbol()
class RightDone {
  constructor(f) {
    this.f = f
    this._typeId = exports.RightDoneTypeId
  }
}
exports.RightDone = RightDone
exports._R = "_R"
exports._E0 = "_E0"
exports._Z0 = "_Z0"
exports._E = "_E"
exports._Z = "_Z"
exports.MergeDecisionTypeId = Symbol()
class MergeDecision {
  constructor() {
    this._mergeDecisionTypeId = exports.MergeDecisionTypeId
  }
}
exports.MergeDecision = MergeDecision
function concrete(decision) {
  //
}
exports.concrete = concrete
exports.DoneTypeId = Symbol()
class Done extends MergeDecision {
  constructor(io) {
    super()
    this.io = io
    this._typeId = exports.DoneTypeId
  }
}
exports.Done = Done
exports.AwaitTypeId = Symbol()
class Await extends MergeDecision {
  constructor(f) {
    super()
    this.f = f
    this._typeId = exports.AwaitTypeId
  }
}
exports.Await = Await
function done(io) {
  return new Done(io)
}
exports.done = done
function await_(f) {
  return new Await(f)
}
exports.await_ = await_
function awaitConst(io) {
  return new Await((_) => io)
}
exports.awaitConst = awaitConst
//# sourceMappingURL=mergeHelpers.js.map
