# Kernel


fx.experimental.desc-interp.kernel: pure/send/bind constructors producing FreeFx Desc values directly as `μ freeFxApp` data, not Nix-host computations.

## `bind`

_bind Eff Resp A B m f — sequence two computations. Pure case applies `f` to the payload; Impure case snocs `f` into the queue. Linear continuation chains stay flat in the queue, sidestepping Nix's call-depth ceiling._

```
bind : Hoas U -> Hoas (U -> U) -> Hoas U -> Hoas U -> Hoas (μ freeFxApp Eff Resp A) -> (Hoas A -> Hoas (μ freeFxApp Eff Resp B)) -> Hoas (μ freeFxApp Eff Resp B)
```

## `pure`

_pure Eff Resp A v — lift v into the Pure summand of FreeFx; alias for `D.pureCon`._

```
pure : Hoas U -> Hoas (U -> U) -> Hoas U -> Hoas A -> Hoas (μ freeFxApp Eff Resp A)
```

## `qSnoc`

_qSnoc Eff Resp B q f — append the Nix-meta continuation `f` (Hoas q._index.A → Hoas (μ freeFxApp Eff Resp B)) to the right of queue `q`. The chain's input type is q._index.X and its current output is q._index.A. Identity short-circuits to a fresh `qLeaf` at (q._index.A, B); otherwise builds `qNode q (qLeaf q._index.A B fn)` with the seam M = q._index.A asserted via the sidecar invariant on qNode._

```
qSnoc : Hoas U -> Hoas (U -> U) -> Hoas U -> Hoas (μI U² kontQueueApp …) -> (Hoas A -> Hoas (μ freeFxApp Eff Resp B)) -> Hoas (μI U² kontQueueApp …)
```

## `send`

_send Eff Resp op — issue an effect request with the identity continuation; emits an impureCon whose queue slot is `qIdentity Eff Resp (Resp op)` at index `(Resp op, Resp op)`._

```
send : Hoas U -> Hoas (U -> U) -> Hoas Eff -> Hoas (μ freeFxApp Eff Resp (Resp op))
```

