emacs.d/clones/scheme/docs.racket-lang.org/reference/collapsible.html
2022-09-30 11:00:09 +02:00

57 lines
No EOL
66 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"/><meta name="viewport" content="width=device-width, initial-scale=0.8"/><title>8.10&nbsp;Collapsible Contracts</title><link rel="stylesheet" type="text/css" href="../scribble.css" title="default"/><link rel="stylesheet" type="text/css" href="extras.css" title="default"/><link rel="stylesheet" type="text/css" href="../racket.css" title="default"/><link rel="stylesheet" type="text/css" href="../manual-style.css" title="default"/><link rel="stylesheet" type="text/css" href="../manual-racket.css" title="default"/><link rel="stylesheet" type="text/css" href="../manual-racket.css" title="default"/><link rel="stylesheet" type="text/css" href="../doc-site.css" title="default"/><script type="text/javascript" src="../scribble-common.js"></script><script type="text/javascript" src="../manual-racket.js"></script><script type="text/javascript" src="../manual-racket.js"></script><script type="text/javascript" src="../doc-site.js"></script><script type="text/javascript" src="../local-redirect/local-redirect.js"></script><script type="text/javascript" src="../local-redirect/local-user-redirect.js"></script><!--[if IE 6]><style type="text/css">.SIEHidden { overflow: hidden; }</style><![endif]--></head><body id="doc-racket-lang-org"><div class="tocset"><div class="tocview"><div class="tocviewlist tocviewlisttopspace"><div class="tocviewtitle"><table cellspacing="0" cellpadding="0"><tr><td style="width: 1em;"><a href="javascript:void(0);" title="Expand/Collapse" class="tocviewtoggle" onclick="TocviewToggle(this,&quot;tocview_0&quot;);">&#9658;</a></td><td></td><td><a href="index.html" class="tocviewlink" data-pltdoc="x">The Racket Reference</a></td></tr></table></div><div class="tocviewsublisttop" style="display: none;" id="tocview_0"><table cellspacing="0" cellpadding="0"><tr><td align="right">1&nbsp;</td><td><a href="model.html" class="tocviewlink" data-pltdoc="x">Language Model</a></td></tr><tr><td align="right">2&nbsp;</td><td><a href="notation.html" class="tocviewlink" data-pltdoc="x">Notation for Documentation</a></td></tr><tr><td align="right">3&nbsp;</td><td><a href="syntax.html" class="tocviewlink" data-pltdoc="x">Syntactic Forms</a></td></tr><tr><td align="right">4&nbsp;</td><td><a href="data.html" class="tocviewlink" data-pltdoc="x">Datatypes</a></td></tr><tr><td align="right">5&nbsp;</td><td><a href="structures.html" class="tocviewlink" data-pltdoc="x">Structures</a></td></tr><tr><td align="right">6&nbsp;</td><td><a href="mzlib_class.html" class="tocviewlink" data-pltdoc="x">Classes and Objects</a></td></tr><tr><td align="right">7&nbsp;</td><td><a href="mzlib_unit.html" class="tocviewlink" data-pltdoc="x">Units</a></td></tr><tr><td align="right">8&nbsp;</td><td><a href="contracts.html" class="tocviewselflink" data-pltdoc="x">Contracts</a></td></tr><tr><td align="right">9&nbsp;</td><td><a href="match.html" class="tocviewlink" data-pltdoc="x">Pattern Matching</a></td></tr><tr><td align="right">10&nbsp;</td><td><a href="control.html" class="tocviewlink" data-pltdoc="x">Control Flow</a></td></tr><tr><td align="right">11&nbsp;</td><td><a href="concurrency.html" class="tocviewlink" data-pltdoc="x">Concurrency and Parallelism</a></td></tr><tr><td align="right">12&nbsp;</td><td><a href="Macros.html" class="tocviewlink" data-pltdoc="x">Macros</a></td></tr><tr><td align="right">13&nbsp;</td><td><a href="input-and-output.html" class="tocviewlink" data-pltdoc="x">Input and Output</a></td></tr><tr><td align="right">14&nbsp;</td><td><a href="security.html" class="tocviewlink" data-pltdoc="x">Reflection and Security</a></td></tr><tr><td align="right">15&nbsp;</td><td><a href="os.html" class="tocviewlink" data-pltdoc="x">Operating System</a></td></tr><tr><td align="right">16&nbsp;</td><td><a href="memory.html" class="tocviewlink" data-pltdoc="x">Memory Management</a></td></tr><tr><td align="right">17&nbsp;</td><td><a href="unsafe.html" class="tocviewlink" data-pltdoc="x">Unsafe Operations</a></td></tr><tr><td align="right">18&nbsp;</td><td><a href="running.html" class="tocviewlink" data-pltdoc="x">Running Racket</a></td></tr><tr><td align="right"></td><td><a href="doc-bibliography.html" class="tocviewlink" data-pltdoc="x">Bibliography</a></td></tr><tr><td align="right"></td><td><a href="doc-index.html" class="tocviewlink" data-pltdoc="x">Index</a></td></tr></table></div></div><div class="tocviewlist"><table cellspacing="0" cellpadding="0"><tr><td style="width: 1em;"><a href="javascript:void(0);" title="Expand/Collapse" class="tocviewtoggle" onclick="TocviewToggle(this,&quot;tocview_1&quot;);">&#9660;</a></td><td>8&nbsp;</td><td><a href="contracts.html" class="tocviewlink" data-pltdoc="x">Contracts</a></td></tr></table><div class="tocviewsublistbottom" style="display: block;" id="tocview_1"><table cellspacing="0" cellpadding="0"><tr><td align="right">8.1&nbsp;</td><td><a href="data-structure-contracts.html" class="tocviewlink" data-pltdoc="x">Data-<wbr></wbr>structure Contracts</a></td></tr><tr><td align="right">8.2&nbsp;</td><td><a href="function-contracts.html" class="tocviewlink" data-pltdoc="x">Function Contracts</a></td></tr><tr><td align="right">8.3&nbsp;</td><td><a href="parametric-contracts.html" class="tocviewlink" data-pltdoc="x">Parametric Contracts</a></td></tr><tr><td align="right">8.4&nbsp;</td><td><a href="Lazy_Data-structure_Contracts.html" class="tocviewlink" data-pltdoc="x">Lazy Data-<wbr></wbr>structure Contracts</a></td></tr><tr><td align="right">8.5&nbsp;</td><td><a href="Structure_Type_Property_Contracts.html" class="tocviewlink" data-pltdoc="x">Structure Type Property Contracts</a></td></tr><tr><td align="right">8.6&nbsp;</td><td><a href="attaching-contracts-to-values.html" class="tocviewlink" data-pltdoc="x">Attaching Contracts to Values</a></td></tr><tr><td align="right">8.7&nbsp;</td><td><a href="Building_New_Contract_Combinators.html" class="tocviewlink" data-pltdoc="x">Building New Contract Combinators</a></td></tr><tr><td align="right">8.8&nbsp;</td><td><a href="contract-utilities.html" class="tocviewlink" data-pltdoc="x">Contract Utilities</a></td></tr><tr><td align="right">8.9&nbsp;</td><td><a href="racket_contract_base.html" class="tocviewlink" data-pltdoc="x"><span class="RktModLink"><span class="RktSym">racket/<span class="mywbr"> &nbsp;</span>contract/<span class="mywbr"> &nbsp;</span>base</span></span></a></td></tr><tr><td align="right">8.10&nbsp;</td><td><a href="collapsible.html" class="tocviewselflink" data-pltdoc="x">Collapsible Contracts</a></td></tr><tr><td align="right">8.11&nbsp;</td><td><a href="Legacy_Contracts.html" class="tocviewlink" data-pltdoc="x">Legacy Contracts</a></td></tr><tr><td align="right">8.12&nbsp;</td><td><a href="Random_generation.html" class="tocviewlink" data-pltdoc="x">Random generation</a></td></tr></table></div></div></div><div class="tocsub"><div class="tocsubtitle">On this page:</div><table class="tocsublist" cellspacing="0"><tr><td><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fguts..rkt%29._get%2Fbuild-collapsible-late-neg-projection%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">get/<span class="mywbr"> &nbsp;</span>build-<wbr></wbr>collapsible-<wbr></wbr>late-<wbr></wbr>neg-<wbr></wbr>projection</span></span></a></td></tr><tr><td><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fguts..rkt%29._collapsible-contract-continuation-mark-key%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">collapsible-<wbr></wbr>contract-<wbr></wbr>continuation-<wbr></wbr>mark-<wbr></wbr>key</span></span></a></td></tr><tr><td><a href="collapsible.html#%28form._%28%28lib._racket%2Fcontract%2Fprivate%2Fguts..rkt%29._with-collapsible-contract-continuation-mark%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktStxLink">with-<wbr></wbr>collapsible-<wbr></wbr>contract-<wbr></wbr>continuation-<wbr></wbr>mark</span></span></a></td></tr><tr><td><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._prop~3acollapsible-contract%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">prop:<span class="mywbr"> &nbsp;</span>collapsible-<wbr></wbr>contract</span></span></a></td></tr><tr><td><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._collapsible-contract~3f%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">collapsible-<wbr></wbr>contract?</span></span></a></td></tr><tr><td><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._merge%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">merge</span></span></a></td></tr><tr><td><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._collapsible-guard%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">collapsible-<wbr></wbr>guard</span></span></a></td></tr><tr><td><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._collapsible-contract-property~3f%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">collapsible-<wbr></wbr>contract-<wbr></wbr>property?</span></span></a></td></tr><tr><td><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._build-collapsible-contract-property%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">build-<wbr></wbr>collapsible-<wbr></wbr>contract-<wbr></wbr>property</span></span></a></td></tr><tr><td><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._collapsible-ho%2Fc%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">collapsible-<wbr></wbr>ho/<span class="mywbr"> &nbsp;</span>c</span></span></a></td></tr><tr><td><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._collapsible-leaf%2Fc%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">collapsible-<wbr></wbr>leaf/<span class="mywbr"> &nbsp;</span>c</span></span></a></td></tr><tr><td><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._impersonator-prop~3acollapsible%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">impersonator-<wbr></wbr>prop:<span class="mywbr"> &nbsp;</span>collapsible</span></span></a></td></tr><tr><td><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._has-impersonator-prop~3acollapsible~3f%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">has-<wbr></wbr>impersonator-<wbr></wbr>prop:<span class="mywbr"> &nbsp;</span>collapsible?</span></span></a></td></tr><tr><td><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._get-impersonator-prop~3acollapsible%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">get-<wbr></wbr>impersonator-<wbr></wbr>prop:<span class="mywbr"> &nbsp;</span>collapsible</span></span></a></td></tr><tr><td><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._collapsible-property%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">collapsible-<wbr></wbr>property</span></span></a></td></tr><tr><td><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._collapsible-count-property%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">collapsible-<wbr></wbr>count-<wbr></wbr>property</span></span></a></td></tr><tr><td><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._collapsible-wrapper-property%29%29" class="tocsublink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">collapsible-<wbr></wbr>wrapper-<wbr></wbr>property</span></span></a></td></tr></table></div></div><div class="maincolumn"><div class="main"><div class="navsettop"><span class="navleft"><form class="searchform"><input class="searchbox" id="searchbox" type="text" tabindex="1" placeholder="...search manuals..." title="Enter a search string to search the manuals" onkeypress="return DoSearchKey(event, this, &quot;8.6&quot;, &quot;../&quot;);"/></form>&nbsp;&nbsp;<a href="https://docs.racket-lang.org/index.html" title="up to the documentation top" data-pltdoc="x" onclick="return GotoPLTRoot(&quot;8.6&quot;);">top</a><span class="tocsettoggle">&nbsp;&nbsp;<a href="javascript:void(0);" title="show/hide table of contents" onclick="TocsetToggle();">contents</a></span></span><span class="navright">&nbsp;&nbsp;<a href="racket_contract_base.html" title="backward to &quot;8.9 racket/contract/base&quot;" data-pltdoc="x">&larr; prev</a>&nbsp;&nbsp;<a href="contracts.html" title="up to &quot;8 Contracts&quot;" data-pltdoc="x">up</a>&nbsp;&nbsp;<a href="Legacy_Contracts.html" title="forward to &quot;8.11 Legacy Contracts&quot;" data-pltdoc="x">next &rarr;</a></span>&nbsp;</div><h4 x-source-module="(lib &quot;scribblings/reference/reference.scrbl&quot;)" x-source-pkg="racket-doc" x-part-tag="&quot;collapsible&quot;">8.10<tt>&nbsp;</tt><a name="(part._collapsible)"></a><a name="(mod-path._racket/contract/collapsible)"></a>Collapsible Contracts</h4><p><div class="SIntrapara"><table cellspacing="0" cellpadding="0" class="defmodule"><tr><td align="left"><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._require%29%29" class="RktStxLink" data-pltdoc="x">require</a></span><span class="stt"> </span><a href="collapsible.html" class="RktModLink" data-pltdoc="x"><span class="RktSym">racket/contract/collapsible</span></a><span class="RktPn">)</span></td><td align="right"><span class="RpackageSpec"><span class="Smaller">&nbsp;package:</span> <a href="https://pkgs.racket-lang.org/package/base" title="Install this package using `raco pkg install base`"><span class="stt">base</span></a></span></td></tr></table></div><div class="SIntrapara"><p class="SHistory">Added in version 7.1.0.10 of package <span class="stt">base</span>.</p></div></p><p><a name="(tech._collapsible._contract)"></a><span style="font-style: italic">Collapsible contracts</span> are an optimization in the contract system designed
to avoid a particular pathological build up of contract wrappers on higher-order
values. The <span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fvector..rkt%29._vectorof%29%29" class="RktValLink" data-pltdoc="x">vectorof</a></span>, <span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fvector..rkt%29._vector%2Fc%29%29" class="RktValLink" data-pltdoc="x">vector/c</a></span>, and <span class="RktSym"><a href="function-contracts.html#%28form._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._-~3e%29%29" class="RktStxLink" data-pltdoc="x"><span class="nobreak">-&gt;</span></a></span> contract
combinators support collapsing for vector contracts and function contracts for
functions returning a single value.</p><p>Intuitively, a collapsible contract is a tree structure.
The <a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._collapsible-ho%2Fc%29%29" data-pltdoc="x">tree nodes</a> represent higher-order contracts
(e.g., <span class="RktSym"><a href="function-contracts.html#%28form._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._-~3e%29%29" class="RktStxLink" data-pltdoc="x"><span class="nobreak">-&gt;</span></a></span>) and the <a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._collapsible-leaf%2Fc%29%29" data-pltdoc="x">tree leaves</a>
represent sequences of flat contracts.
Two trees can collapse into one tree via the <span class="RktSym"><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._merge%29%29" class="RktValLink" data-pltdoc="x">merge</a></span> procedure,
which removes unnecessary flat contracts from the leaves.</p><p>For more information on the motivation and design of collapsible contracts,
see [<a href="doc-bibliography.html#%28cite._.Feltey18%29" data-pltdoc="x">Feltey18</a>].
For the theoretical foundations, see [<a href="doc-bibliography.html#%28cite._.Greenberg15%29" data-pltdoc="x">Greenberg15</a>].</p><p><span style="font-weight: bold">Warning</span>: the features described in this section are experimental
and may not be sufficient to implement new collapsible contracts. Implementing
new collapsible contracts requires the use of unsafe chaperones and impersonators
which are only supported for vector and procedure values. This documentation exists
primarily to allow future maintenance of the <span class="RktSym">racket/contract/collapsible</span>
library. <span style="font-weight: bold">End Warning</span></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/contract/private/guts..rkt)._get/build-collapsible-late-neg-projection))"></a><span title="Provided from: racket/contract/collapsible, racket/contract, racket | Package: base"><span class="RktSym"><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fguts..rkt%29._get%2Fbuild-collapsible-late-neg-projection%29%29" class="RktValDef RktValLink" data-pltdoc="x">get/build-collapsible-late-neg-projection</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">c</span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="function-contracts.html#%28form._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._-~3e%29%29" class="RktStxLink" data-pltdoc="x"><span class="nobreak">-&gt;</span></a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Building_New_Contract_Combinators.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fblame..rkt%29._blame~3f%29%29" class="RktValLink" data-pltdoc="x">blame?</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="values.html#%28def._%28%28quote._~23~25kernel%29._values%29%29" class="RktValLink" data-pltdoc="x">values</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="function-contracts.html#%28form._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._-~3e%29%29" class="RktStxLink" data-pltdoc="x"><span class="nobreak">-&gt;</span></a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._collapsible-contract~3f%29%29" class="RktValLink" data-pltdoc="x">collapsible-contract?</a></span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">c</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="contract-utilities.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fguts..rkt%29._contract~3f%29%29" class="RktValLink" data-pltdoc="x">contract?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Returns the <span class="RktVar">collapsible-late-neg</span> projection for <span class="RktVar">c</span>.</div></p><p>If <span class="RktVar">c</span> does not have a <span class="RktVar">collapsible-late-neg</span> projection,
then this function uses the original projection for it and constructs a leaf
as its collapsible representation.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>value</p></div></div><p class="RForeground"><a name="(def._((lib._racket/contract/private/guts..rkt)._collapsible-contract-continuation-mark-key))"></a><span title="Provided from: racket/contract/collapsible, racket/contract, racket | Package: base"><span class="RktSym"><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fguts..rkt%29._collapsible-contract-continuation-mark-key%29%29" class="RktValDef RktValLink" data-pltdoc="x">collapsible-contract-continuation-mark-key</a></span></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="contmarks.html#%28def._%28%28quote._~23~25kernel%29._continuation-mark-key~3f%29%29" class="RktValLink" data-pltdoc="x">continuation-mark-key?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Key used by continuation marks that are present during collapsible contract checking.
The value of these marks are <span class="RktVal">#t</span> if the current contract is collapsible.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>syntax</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(form._((lib._racket/contract/private/guts..rkt)._with-collapsible-contract-continuation-mark))"></a><span title="Provided from: racket/contract/collapsible, racket/contract, racket | Package: base"><span class="RktSym"><a href="collapsible.html#%28form._%28%28lib._racket%2Fcontract%2Fprivate%2Fguts..rkt%29._with-collapsible-contract-continuation-mark%29%29" class="RktStxDef RktStxLink" data-pltdoc="x">with-collapsible-contract-continuation-mark</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">body</span><span class="hspace">&nbsp;</span><span class="RktMeta">...</span><span class="RktPn">)</span></p></blockquote></td></tr></table></blockquote></div><div class="SIntrapara">Inserts a continuation mark that informs the contract profiler that the current contract
is collapsible.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>value</p></div></div><p class="RForeground"><a name="(def._((lib._racket/contract/collapsible..rkt)._prop~3acollapsible-contract))"></a><span title="Provided from: racket/contract/collapsible, racket/contract, racket | Package: base"><span class="RktSym"><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._prop~3acollapsible-contract%29%29" class="RktValDef RktValLink" data-pltdoc="x">prop:collapsible-contract</a></span></span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="structprops.html#%28def._%28%28quote._~23~25kernel%29._struct-type-property~3f%29%29" class="RktValLink" data-pltdoc="x">struct-type-property?</a></span></p></blockquote></td></tr></table></blockquote></div><div class="SIntrapara">Structures implementing this property are usable as collapsible contracts. The value
associated with this property should be constructed by calling
<span class="RktSym"><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._build-collapsible-contract-property%29%29" class="RktValLink" data-pltdoc="x">build-collapsible-contract-property</a></span>.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/contract/collapsible..rkt)._collapsible-contract~3f))"></a><span title="Provided from: racket/contract/collapsible, racket/contract, racket | Package: base"><span class="RktSym"><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._collapsible-contract~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">collapsible-contract?</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="booleans.html#%28def._%28%28quote._~23~25kernel%29._boolean~3f%29%29" class="RktValLink" data-pltdoc="x">boolean?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">v</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></td></tr></table></blockquote></div><div class="SIntrapara">A predicate recognizing structures with the <span class="RktSym"><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._prop~3acollapsible-contract%29%29" class="RktValLink" data-pltdoc="x">prop:collapsible-contract</a></span> property.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/contract/collapsible..rkt)._merge))"></a><span title="Provided from: racket/contract/collapsible, racket/contract, racket | Package: base"><span class="RktSym"><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._merge%29%29" class="RktValDef RktValLink" data-pltdoc="x">merge</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">new-cc</span><span class="hspace">&nbsp;</span><span class="RktVar">new-neg</span><span class="hspace">&nbsp;</span><span class="RktVar">old-cc</span><span class="hspace">&nbsp;</span><span class="RktVar">old-neg</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._collapsible-contract~3f%29%29" class="RktValLink" data-pltdoc="x">collapsible-contract?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">new-cc</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._collapsible-contract~3f%29%29" class="RktValLink" data-pltdoc="x">collapsible-contract?</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">new-neg</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">old-cc</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._collapsible-contract~3f%29%29" class="RktValLink" data-pltdoc="x">collapsible-contract?</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">old-neg</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Combine two collapsible contracts into a single collapsible contract.
The <span class="RktVar">new-neg</span> and <span class="RktVar">old-neg</span> arguments are expected to be
blame parties similar to those passed to a <a href="Building_New_Contract_Combinators.html#%28tech._late._neg._projection%29" class="techoutside" data-pltdoc="x"><span class="techinside">late neg projection</span></a>.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/contract/collapsible..rkt)._collapsible-guard))"></a><span title="Provided from: racket/contract/collapsible, racket/contract, racket | Package: base"><span class="RktSym"><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._collapsible-guard%29%29" class="RktValDef RktValLink" data-pltdoc="x">collapsible-guard</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">cc</span><span class="hspace">&nbsp;</span><span class="RktVar">val</span><span class="hspace">&nbsp;</span><span class="RktVar">neg-party</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">cc</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._collapsible-contract~3f%29%29" class="RktValLink" data-pltdoc="x">collapsible-contract?</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">val</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">neg-party</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Similar to a <a href="Building_New_Contract_Combinators.html#%28tech._late._neg._projection%29" class="techoutside" data-pltdoc="x"><span class="techinside">late neg projection</span></a>, this function guards the value <span class="RktVar">val</span>
with the collapsible contract <span class="RktVar">cc</span>.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/contract/collapsible..rkt)._collapsible-contract-property~3f))"></a><span title="Provided from: racket/contract/collapsible, racket/contract, racket | Package: base"><span class="RktSym"><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._collapsible-contract-property~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">collapsible-contract-property?</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="booleans.html#%28def._%28%28quote._~23~25kernel%29._boolean~3f%29%29" class="RktValLink" data-pltdoc="x">boolean?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">v</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></td></tr></table></blockquote></div><div class="SIntrapara">This predicate indicates that a value can be used as the property for
<span class="RktSym"><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._prop~3acollapsible-contract%29%29" class="RktValLink" data-pltdoc="x">prop:collapsible-contract</a></span>.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><table cellspacing="0" cellpadding="0" class="prototype RForeground"><tr><td valign="top" colspan="3"><span class="RktPn">(</span><a name="(def._((lib._racket/contract/collapsible..rkt)._build-collapsible-contract-property))"></a><span title="Provided from: racket/contract/collapsible, racket/contract, racket | Package: base"><span class="RktSym"><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._build-collapsible-contract-property%29%29" class="RktValDef RktValLink" data-pltdoc="x">build-collapsible-contract-property</a></span></span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span><span class="RktOpt">[</span></td><td valign="top"><span class="RktPn">#:try-merge</span><span class="hspace">&nbsp;</span><span class="RktVar">try-merge</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktPn">#:collapsible-guard</span><span class="hspace">&nbsp;</span><span class="RktVar">collapsible-guard</span><span class="RktOpt">]</span><span class="RktPn">)</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._collapsible-contract-property~3f%29%29" class="RktValLink" data-pltdoc="x">collapsible-contract-property?</a></span></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="argcontract"><tr><td valign="top"><span class="hspace">&nbsp;&nbsp;</span></td><td valign="top"><span class="RktVar">try-merge</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top">:</td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="function-contracts.html#%28form._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._-~3e%29%29" class="RktStxLink" data-pltdoc="x"><span class="nobreak">-&gt;</span></a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._collapsible-contract~3f%29%29" class="RktValLink" data-pltdoc="x">collapsible-contract?</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktSym"><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._collapsible-contract~3f%29%29" class="RktValLink" data-pltdoc="x">collapsible-contract?</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._collapsible-contract~3f%29%29" class="RktValLink" data-pltdoc="x">collapsible-contract?</a></span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top">=</td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVal">#f</span></td></tr></table></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="argcontract"><tr><td valign="top"><span class="hspace">&nbsp;&nbsp;</span></td><td valign="top"><span class="RktVar">collapsible-guard</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top">:</td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktPn">(</span><span class="RktSym"><a href="function-contracts.html#%28form._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._-~3e%29%29" class="RktStxLink" data-pltdoc="x"><span class="nobreak">-&gt;</span></a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._collapsible-contract~3f%29%29" class="RktValLink" data-pltdoc="x">collapsible-contract?</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span><span class="RktPn">)</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top">=</td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="RktPn">(</span><span class="RktSym"><a href="lambda.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._~ce~bb%29%29" class="RktStxLink" data-pltdoc="x">&#955;</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym">cc</span><span class="hspace">&nbsp;</span><span class="RktSym">v</span><span class="hspace">&nbsp;</span><span class="RktSym">neg</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="exns.html#%28def._%28%28quote._~23~25kernel%29._error%29%29" class="RktValLink" data-pltdoc="x">error</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;&nbsp;</span><span class="RktVal">"internal error: contract does not support `collapsible-guard`"</span><span class="hspace">&nbsp;</span><span class="RktSym">cc</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></td></tr></table></td></tr></table></blockquote></div><div class="SIntrapara">Constructs a <a name="(tech._collapsible._contract._property)"></a><span style="font-style: italic">collapsible contract property</span> from a merging function and a guard.
The <span class="RktVar">try-merge</span> argument is similar to <span class="RktSym"><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._merge%29%29" class="RktValLink" data-pltdoc="x">merge</a></span>, but may return <span class="RktVal">#f</span> instead
of a collapsible contract and may be specialized to a particular collapsible contract.
The <span class="RktVar">collapsible-guard</span> argument should be specialized to the particular collapsible
contract being implemented.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>struct</p></div></div><p class="RForeground"><span class="RktPn">(</span><span class="RktSym"><a href="define-struct.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._struct%29%29" class="RktStxLink" data-pltdoc="x">struct</a></span><span class="stt"> </span><a name="(def._((lib._racket/contract/collapsible..rkt)._collapsible-ho/c-latest-ctc))"></a><a name="(def._((lib._racket/contract/collapsible..rkt)._collapsible-ho/c-missing-party))"></a><a name="(def._((lib._racket/contract/collapsible..rkt)._collapsible-ho/c-latest-blame))"></a><a name="(def._((lib._racket/contract/collapsible..rkt)._collapsible-ho/c~3f))"></a><a name="(def._((lib._racket/contract/collapsible..rkt)._struct~3acollapsible-ho/c))"></a><a name="(def._((lib._racket/contract/collapsible..rkt)._collapsible-ho/c))"></a><span title="Provided from: racket/contract/collapsible, racket/contract, racket | Package: base"><span class="RktSym"><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._collapsible-ho%2Fc%29%29" class="RktValDef RktValLink" data-pltdoc="x">collapsible-ho/c</a></span></span><span class="stt"> </span><span class="RktPn">(</span><span class="RktSym">latest-blame</span><span class="stt"> </span><span class="RktSym">missing-party</span><span class="stt"> </span><span class="RktSym">latest-ctc</span><span class="RktPn">)</span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktSym">latest-blame</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="Building_New_Contract_Combinators.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fblame..rkt%29._blame~3f%29%29" class="RktValLink" data-pltdoc="x">blame?</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktSym">missing-party</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktSym">latest-ctc</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="contract-utilities.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fguts..rkt%29._contract~3f%29%29" class="RktValLink" data-pltdoc="x">contract?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">A common parent structure for collapsible contracts for higher-order values.
The <span class="RktSym">latest-blame</span> field holds the blame object for the most recent
contract attached. Similarly, the <span class="RktSym">missing-party</span> field holds the latest
missing party passed to the contract. The <span class="RktSym">latest-contract</span> field stores
the most recent contract attached to the value.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>struct</p></div></div><table cellspacing="0" cellpadding="0" class="RForeground"><tr><td><span class="RktPn">(</span><span class="RktSym"><a href="define-struct.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._struct%29%29" class="RktStxLink" data-pltdoc="x">struct</a></span></td><td><span class="hspace">&nbsp;</span></td><td><span class="nobreak"><a name="(def._((lib._racket/contract/collapsible..rkt)._collapsible-leaf/c-missing-party-list))"></a><a name="(def._((lib._racket/contract/collapsible..rkt)._collapsible-leaf/c-blame-list))"></a><a name="(def._((lib._racket/contract/collapsible..rkt)._collapsible-leaf/c-contract-list))"></a><a name="(def._((lib._racket/contract/collapsible..rkt)._collapsible-leaf/c-proj-list))"></a><a name="(def._((lib._racket/contract/collapsible..rkt)._collapsible-leaf/c~3f))"></a><a name="(def._((lib._racket/contract/collapsible..rkt)._struct~3acollapsible-leaf/c))"></a><a name="(def._((lib._racket/contract/collapsible..rkt)._collapsible-leaf/c))"></a><span title="Provided from: racket/contract/collapsible, racket/contract, racket | Package: base"><span class="RktSym"><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._collapsible-leaf%2Fc%29%29" class="RktValDef RktValLink" data-pltdoc="x">collapsible-leaf/c</a></span></span></span></td><td><span class="hspace">&nbsp;</span><span class="RktPn">(</span></td><td><span class="nobreak"><span class="RktSym">proj-list</span></span></td></tr><tr><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="RktSym">contract-list</span></td></tr><tr><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="RktSym">blame-list</span></td></tr><tr><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="RktSym">missing-party-list</span><span class="RktPn">))</span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktSym">proj-list</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._listof%29%29" class="RktValLink" data-pltdoc="x">listof</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="function-contracts.html#%28form._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._-~3e%29%29" class="RktStxLink" data-pltdoc="x"><span class="nobreak">-&gt;</span></a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktSym">contract-list</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._listof%29%29" class="RktValLink" data-pltdoc="x">listof</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="contract-utilities.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fguts..rkt%29._contract~3f%29%29" class="RktValLink" data-pltdoc="x">contract?</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktSym">blame-list</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._listof%29%29" class="RktValLink" data-pltdoc="x">listof</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="Building_New_Contract_Combinators.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fblame..rkt%29._blame~3f%29%29" class="RktValLink" data-pltdoc="x">blame?</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktSym">missing-party-list</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._listof%29%29" class="RktValLink" data-pltdoc="x">listof</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara">A structure representing the leaf nodes of a collapsible contract. The <span class="RktSym">proj-list</span>
field holds a list of partially applied <a href="Building_New_Contract_Combinators.html#%28tech._late._neg._projection%29" class="techoutside" data-pltdoc="x"><span class="techinside">late neg projections</span></a>. The <span class="RktSym">contract-list</span>,
<span class="RktSym">blame-list</span>, and <span class="RktSym">missing-party-list</span> fields hold a list of contracts,
blame objects, and blame missing parties respectively.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><table cellspacing="0" cellpadding="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>value</p></div></div><p class="RForeground"><a name="(def._((lib._racket/contract/collapsible..rkt)._impersonator-prop~3acollapsible))"></a><span title="Provided from: racket/contract/collapsible, racket/contract, racket | Package: base"><span class="RktSym"><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._impersonator-prop~3acollapsible%29%29" class="RktValDef RktValLink" data-pltdoc="x">impersonator-prop:collapsible</a></span></span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="chaperones.html#%28def._%28%28quote._~23~25kernel%29._impersonator-property~3f%29%29" class="RktValLink" data-pltdoc="x">impersonator-property?</a></span></p></blockquote></td></tr></table></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/contract/collapsible..rkt)._has-impersonator-prop~3acollapsible~3f))"></a><span title="Provided from: racket/contract/collapsible, racket/contract, racket | Package: base"><span class="RktSym"><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._has-impersonator-prop~3acollapsible~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">has-impersonator-prop:collapsible?</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="booleans.html#%28def._%28%28quote._~23~25kernel%29._boolean~3f%29%29" class="RktValLink" data-pltdoc="x">boolean?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">v</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></td></tr></table></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/contract/collapsible..rkt)._get-impersonator-prop~3acollapsible))"></a><span title="Provided from: racket/contract/collapsible, racket/contract, racket | Package: base"><span class="RktSym"><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._get-impersonator-prop~3acollapsible%29%29" class="RktValDef RktValLink" data-pltdoc="x">get-impersonator-prop:collapsible</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._collapsible-property~3f%29%29" class="RktValLink" data-pltdoc="x">collapsible-property?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">v</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></td></tr></table></td></tr></table></blockquote></div><div class="SIntrapara">An impersonator property (and its accessors) that should be attached to chaperoned or impersonated
values that are guarded with a collapsible contract.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>struct</p></div></div><p class="RForeground"><span class="RktPn">(</span><span class="RktSym"><a href="define-struct.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._struct%29%29" class="RktStxLink" data-pltdoc="x">struct</a></span><span class="stt"> </span><a name="(def._((lib._racket/contract/collapsible..rkt)._collapsible-property-ref))"></a><a name="(def._((lib._racket/contract/collapsible..rkt)._collapsible-property-neg-party))"></a><a name="(def._((lib._racket/contract/collapsible..rkt)._collapsible-property-c-c))"></a><a name="(def._((lib._racket/contract/collapsible..rkt)._collapsible-property~3f))"></a><a name="(def._((lib._racket/contract/collapsible..rkt)._struct~3acollapsible-property))"></a><a name="(def._((lib._racket/contract/collapsible..rkt)._collapsible-property))"></a><span title="Provided from: racket/contract/collapsible, racket/contract, racket | Package: base"><span class="RktSym"><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._collapsible-property%29%29" class="RktValDef RktValLink" data-pltdoc="x">collapsible-property</a></span></span><span class="stt"> </span><span class="RktPn">(</span><span class="RktSym">c-c</span><span class="stt"> </span><span class="RktSym">neg-party</span><span class="stt"> </span><span class="RktSym">ref</span><span class="RktPn">)</span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktSym">c-c</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._collapsible-contract~3f%29%29" class="RktValLink" data-pltdoc="x">collapsible-contract?</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktSym">neg-party</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktSym">ref</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="chaperones.html#%28def._%28%28quote._~23~25kernel%29._impersonator~3f%29%29" class="RktValLink" data-pltdoc="x">impersonator?</a></span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara">The parent struct of properties that should be attached to chaperones or impersonators
of values protected with a collapsible contract. The <span class="RktSym">c-c</span> field stores the collapsible
contract that is or will in the future be attached to the the value. The <span class="RktSym">neg-party</span> field
stores the latest missing blame party passed to the contract on the value. The <span class="RktSym">ref</span> field
is mutable and stores a reference to the chaperone or impersonator to which this property is
attached. This is necessary to determine whether an unknown chaperone has been attached to a value
after it has been protected by a collapsible contract.
</div><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>struct</p></div></div><table cellspacing="0" cellpadding="0" class="RForeground"><tr><td><span class="RktPn">(</span><span class="RktSym"><a href="define-struct.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._struct%29%29" class="RktStxLink" data-pltdoc="x">struct</a></span></td><td><span class="hspace">&nbsp;</span></td><td><span class="nobreak"><a name="(def._((lib._racket/contract/collapsible..rkt)._collapsible-count-property-prev))"></a><a name="(def._((lib._racket/contract/collapsible..rkt)._collapsible-count-property-count))"></a><a name="(def._((lib._racket/contract/collapsible..rkt)._collapsible-count-property~3f))"></a><a name="(def._((lib._racket/contract/collapsible..rkt)._struct~3acollapsible-count-property))"></a><a name="(def._((lib._racket/contract/collapsible..rkt)._collapsible-count-property))"></a><span title="Provided from: racket/contract/collapsible, racket/contract, racket | Package: base"><span class="RktSym"><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._collapsible-count-property%29%29" class="RktValDef RktValLink" data-pltdoc="x">collapsible-count-property</a></span></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._collapsible-property%29%29" class="RktValLink" data-pltdoc="x">collapsible-property</a></span></span></td><td><span class="hspace">&nbsp;</span><span class="RktPn">(</span></td><td><span class="nobreak"><span class="RktSym">count</span></span></td></tr><tr><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="RktSym">prev</span><span class="RktPn">))</span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktSym">count</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._natural-number%2Fc%29%29" class="RktValLink" data-pltdoc="x">natural-number/c</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktSym">prev</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._or%2Fc%29%29" class="RktValLink" data-pltdoc="x">or/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._collapsible-count-property~3f%29%29" class="RktValLink" data-pltdoc="x">collapsible-count-property?</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara">This property is associated with the <span class="RktSym"><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._impersonator-prop~3acollapsible%29%29" class="RktValLink" data-pltdoc="x">impersonator-prop:collapsible</a></span> property before
the value completely enters the collapsible mode. These properties keep track of the number of
contracts on a value in the <span class="RktVar">count</span> field, and hold a reference to the previous
<a name="(tech._count._property)"></a><span style="font-style: italic">count property</span> in the <span class="RktSym">prev</span> field or the original value without a contract. This
allows the contract system to traverse the chain of attached contracts and merge them into a single
collapsible contract to protect the original value.
</div><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>struct</p></div></div><table cellspacing="0" cellpadding="0" class="RForeground"><tr><td><span class="RktPn">(</span><span class="RktSym"><a href="define-struct.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._struct%29%29" class="RktStxLink" data-pltdoc="x">struct</a></span></td><td><span class="hspace">&nbsp;</span></td><td><span class="nobreak"><a name="(def._((lib._racket/contract/collapsible..rkt)._collapsible-wrapper-property-checking-wrapper))"></a><a name="(def._((lib._racket/contract/collapsible..rkt)._collapsible-wrapper-property~3f))"></a><a name="(def._((lib._racket/contract/collapsible..rkt)._struct~3acollapsible-wrapper-property))"></a><a name="(def._((lib._racket/contract/collapsible..rkt)._collapsible-wrapper-property))"></a><span title="Provided from: racket/contract/collapsible, racket/contract, racket | Package: base"><span class="RktSym"><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._collapsible-wrapper-property%29%29" class="RktValDef RktValLink" data-pltdoc="x">collapsible-wrapper-property</a></span></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="collapsible.html#%28def._%28%28lib._racket%2Fcontract%2Fcollapsible..rkt%29._collapsible-property%29%29" class="RktValLink" data-pltdoc="x">collapsible-property</a></span></span></td></tr><tr><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="RktPn">(</span><span class="nobreak"><span class="RktSym">checking-wrapper</span><span class="RktPn">)</span></span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktSym">checking-wrapper</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="chaperones.html#%28def._%28%28quote._~23~25kernel%29._impersonator~3f%29%29" class="RktValLink" data-pltdoc="x">impersonator?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">This property is used when a value is guarded by a collapsible contract. The
<span class="RktSym">checking-wrapper</span> field holds a chaperone or impersonator that dispatches to the
collapsible contract stored in this property to perform any necessary contract checks. When
the value receives another contract and merging happens, the checking wrapper will remain the
same even though the specific collapsible contract attached to the value may change.</div></p><div class="navsetbottom"><span class="navleft"><form class="searchform"><input class="searchbox" id="searchbox" type="text" tabindex="1" placeholder="...search manuals..." title="Enter a search string to search the manuals" onkeypress="return DoSearchKey(event, this, &quot;8.6&quot;, &quot;../&quot;);"/></form>&nbsp;&nbsp;<a href="https://docs.racket-lang.org/index.html" title="up to the documentation top" data-pltdoc="x" onclick="return GotoPLTRoot(&quot;8.6&quot;);">top</a><span class="tocsettoggle">&nbsp;&nbsp;<a href="javascript:void(0);" title="show/hide table of contents" onclick="TocsetToggle();">contents</a></span></span><span class="navright">&nbsp;&nbsp;<a href="racket_contract_base.html" title="backward to &quot;8.9 racket/contract/base&quot;" data-pltdoc="x">&larr; prev</a>&nbsp;&nbsp;<a href="contracts.html" title="up to &quot;8 Contracts&quot;" data-pltdoc="x">up</a>&nbsp;&nbsp;<a href="Legacy_Contracts.html" title="forward to &quot;8.11 Legacy Contracts&quot;" data-pltdoc="x">next &rarr;</a></span>&nbsp;</div></div></div><div id="contextindicator">&nbsp;</div></body></html>