Typed Racket &lt;<a href="https:&#x2F;&#x2F;docs.racket-lang.org&#x2F;ts-guide&#x2F;&gt;" rel="nofollow">https:&#x2F;&#x2F;docs.racket-lang.org&#x2F;ts-guide&#x2F;&gt;</a> is pretty successful in the Racket community.  It&#x27;s also prompted some pessimistic papers about gradual sound typing, since it&#x27;s hard to avoid a performance hit when imposing type safety on untyped code using contracts.   On the other hand, that performance hit is in part typechecker&#x2F;compiler implementation dependent and in part dependent on the granularity of the added typing (e.g. typing modules or functions vs typing subexpressions).<p>Typed Racket code often gains a speedup over untyped Racket, since sound typing allows the elision of contracts and other runtime overheads for safety.   There is no penalty at all for invoking Typed Racket code from untyped code, either in terms of performance or in terms of what the untyped-language programmer needs to know.