Navigation

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))