Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
language:langs:refine [2024/08/11 10:31] – [Multiple refinement options] rajitlanguage:langs:refine [2025/04/21 19:58] (current) – [Refinement overrides] rajit
Line 115: Line 115:
  
 In general, a refine block has an associated integer refinement level (the default is one). When ACT processes a block with refinement level //r//, it searches for the largest refinement block with level that is at most //r//. (Note: this may be no block, in which case the block is processed as normal.) If a refine block with level //l// is found, then it processes all non-language constructs within the block and then expands the refinement block with level //l// by decrementing the current refinement level by //l//. In general, a refine block has an associated integer refinement level (the default is one). When ACT processes a block with refinement level //r//, it searches for the largest refinement block with level that is at most //r//. (Note: this may be no block, in which case the block is processed as normal.) If a refine block with level //l// is found, then it processes all non-language constructs within the block and then expands the refinement block with level //l// by decrementing the current refinement level by //l//.
 +
 +===== Refinement overrides =====
 +
 +Sometimes a refinement body needs to [[language:impl#overrides|override]] types. To support this, refinement bodies can be accompanied by refinement overrides. These are overrides that are only applied when the refinement is used.
 +
 +The syntax for providing refinement overrides is below:
 +
 +<code act>
 +refine<2>  +{ e1of2 l; } {
 +       inst1 i1; 
 +       ...
 + }
 +</code>
 +
 +This will apply the refinement override for ''l'' when this particular refinement body is selected.
 +  
 +   
 +
 +</code>
 +