# Effects — pure core + algebraic effects ## Decision 3: pure core language + algebraic effects The default is total, pure functions. Effects are declared as a set in the function type: `(Int) -> Int ![IO]`. The effect set is a flat, unordered, closed set of effect names, unified by set-equality — there is no effect row variable; a signature lists exactly the effects its body may perform. In the MVP only the effect `IO` is wired up (its sole op is `io/print_str`). `Diverge` (for non-termination) is reserved as an effect name but is unimplemented — no op, no codegen, no checker injection — in the same sense Decision 4 reserves refinements. This is the most important LLM property: when I read a function, I can trust its signature without reading the body.