Laurel Implementor Guide

5.3. Contract representation🔗

The four coroutine clause families (relies, guarantees, yields, resumes) live on Procedure.contracts : CoroutineContracts, a sum type whose Coroutine case carries all four lists and whose Regular case carries none. Procedure.kind is recovered from which case is present, so a regular procedure cannot hold a stray relies clause. Both lowering paths consume these clauses and reset contracts to Regular, so downstream passes treat the result as an ordinary procedure.