; Iter it.2 positive (DD-4 / D2): a fn whose body contains a ; `(loop …)` must declare `!Diverge`. This one does — its effect row ; carries `Diverge` (and `IO`, since it `print`s the result), so the ; existing declared-vs-raised reconciliation accepts it. Modelled on ; `loop_counter.ail` (it.1) with `Diverge` added to the effect row. (module loop_needs_diverge (fn main (doc "Sum 1..10 via an accumulator loop; loop-bearing ⇒ !Diverge. Expected stdout: 55.") (type (fn-type (params) (ret (con Unit)) (effects IO Diverge))) (params) (body (app print (loop ((var acc (con Int) 0) (var i (con Int) 1)) (if (app > i 10) acc (recur (app + acc i) (app + i 1))))))))