<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">The documentation for <a href="http://docs.racket-lang.org/reference/Building_New_Contract_Combinators.html?q=make-contract#(def._((lib._racket/contract/private/prop..rkt)._make-contract))" class=""><font face="Courier" class="">make-contract</font></a> and similar functions includes an optional <font face="Courier" class="">#:val-first-projection</font> keyword argument. What is this for? How does it differ from the <font face="Courier" class="">#:projection</font> argument?<div class=""><br class=""></div><div class="">The documentation does include this note:</div><div class=""><br class=""></div><div class=""><blockquote type="cite" class="">The precise details of the <font face="Courier" class="">val-first-projection</font> argument are subject to change.</blockquote><br class=""></div><div class="">I don’t know how long that message has been there, but I somehow doubt that the details are still “subject to change”. Could that argument be documented? I’d at least like to understand what it’s for and how I’m supposed to use it in new contract combinators. Also, what happens if I leave it out or pass <font face="Courier" class="">#f</font>?</div><div class=""><br class=""></div><div class="">As far as I can tell, the primary difference is that the procedure supplied  for <font face="Courier" class="">val-first-projection</font> takes an additional curried argument, the “negative party”. This is handled specially for contract failures that fail on this “first projection” by passing the argument to <font face="Courier" class="">raise-blame-error</font> via an <i class="">undocumented keyword argument</i>, <font face="Courier" class="">#:missing-party</font>. What does this do, exactly?</div><div class=""><br class=""></div><div class="">Thanks,</div><div class="">Alexis</div></body></html>