Hey all, <br><br>One feature of typed racket that makes translation between untyped and typed code somewhat less simple than adding or removing type signatures is that certain forms require rewriting/alteration of the untyped form itself. Others allow stand-alone declaration of the types prior to the form. <br>
<br>  #lang racket<br>(define (louder s) (string-append s &quot;!&quot;))<br>
<br>becomes <br>#lang typed/racket <br> (: louder : String -&gt; String)<br>(define (louder s) (string-append s &quot;!&quot;))<br><br>but <br><br>#lang racket<br>(struct arrow (dom cod))<br><br>becomes <br>#lang typed/racket<br>
(struct: arrow ([dom : Any] [cod : Any]))<br><br>or a stricter<br>#lang typed/racket<br>(struct: (A B) arrow ([dom : A] [cod : B]))<br><br>I tend to prefer the former case, as moving to untyped code just requires removal of the (: louder ...) type declaration. <br>
<br>I&#39;d really dig the addition of an alternate way to declare types on structs in particular: <br><br>#lang typed/racket<br>(: arrow (ForAll (A B) (StructOf A B)))<br>(struct arrow (a b))<br><br>This allows me to reuse my mental untyped code parser for struct forms, while the struct: form requires an additional rule. It also makes declaration of types more uniform. Not sure whether this is possible. <br>
<br>Thanks all, <br>-Patrick<br><br><div class="gmail_quote">On 20 September 2012 12:02,  <span dir="ltr">&lt;<a href="mailto:thorsopia@lavabit.com" target="_blank">thorsopia@lavabit.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Thank you all for the replies.<br>
<br>
I&#39;ll give it a try.<br>
<div><div><br>
<br>
____________________<br>
  Racket Users list:<br>
  <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
</div></div></blockquote></div><br>