CP-INDEPENDENT-EXTENSIONS - A new data form and a new operation must work together
- Situation: One contributor adds a data variant while another adds an operation; their separate extensions leave the joint case undefined.
- Question: Who supplies the missing behavior, how is it selected, and which old uses remain unchanged?
- First useful result or blocker: A composition covering the required pairs, with an explicit joining implementation, or a named unsupported or conflicting pair.
- Start with: CMP.15 - Compose Independent Extensions of Data Variants and Operations. Use CMP.12 when the interpretation itself still needs construction; use CMP.14 when shared state or changes during execution affect the result.
- Stop or return: Keep a sufficient closed design when independent extension adds no useful freedom. A new required pair, changed meaning or changed dispatch rule reopens the affected composition.
For example, one extension supplies lexical Let and its evaluation, while another supplies free-variable analysis for the old arithmetic forms. Combining the modules leaves FreeVariables(Let) to be written. The bound name is removed from the body’s free names, but not from the value expression’s free names. CMP.15:5 derives this joining rule and shows both an executable assembly and a typed alternative. Successful registration alone cannot establish that meaning.