defmodule Skuld.Coroutine.ExternalSuspended do
@moduledoc """
Fiber suspended for an external caller (e.g. Yield).
## Env semantics
`k` closes over the env at suspension time — resuming ignores `env`
entirely. `env` is stored solely for `cancel/2`, which invokes
`leave_scope` to run scoped-effect cleanup. State in `env` is stale
(the scheduler extracted it at suspension) but leave_scope handlers
may still read it during teardown.
"""
alias Skuld.Comp.Env
alias Skuld.Comp.Types
@type t :: %__MODULE__{
id: term(),
value: term(),
data: term(),
k: Types.k(),
env: Env.t()
}
defstruct [:id, :value, :data, :k, :env]
end