This weekend I completed a 3 weekend exercise converting just short of 10K wc -l lines of racket code.  All told it took 3 weekends to get there.  I did it because it appears 10K lines is about my conceptual limit given my slovenly documentation habits.<div>
<br></div><div>The old code worked just fine, however it was no longer readily apparent to my why this should be the case. </div><div><br></div><div>Some observations:</div><div><ul><li>95% of the time adding signatures was very straight forward.  </li>
<li>In &lt;2% I had some difficulties, some self inflicted, some hitting some rough areas where things are not yet competed in typed Racket, I was always able to come up with something that worked.</li><li>Was surprised by the number of sunny day assumptions in my original code  Typing forced me to handle all &quot;cases&quot;.  The code is now more robust then before.</li>
<li>The typing syntax overall is really quite good.  It did not come across as an afterthought bolt-on.</li><li>require/typed works cleanly to &quot;lift&quot; untyped racket code from 3rd party libs into typed land. </li>
<li>The time it takes to initially type check a high up in the module hierarchy module does start to impact the development cycle however.</li></ul>Overall the doing and completing of the migration took a pile of code on the verge of anarchy and put it back under control.  I feel confident it could double in size a number of times and remain so.</div>
<div><br></div><div>I think typed racket is a huge win.  Controversially, (oh boy) I&#39;d go as far to say Racket should just go 100% typed from bone to guts, top to bottom.</div><div><br></div><div>Racket - The Programming Language With The (Soon To Be) Most Advanced Type System In The World.  *whew*</div>
<div><br></div><div>Who&#39;d a thunk it.</div><div><br>
</div>