Racket Contracts: Catching Integration Bugs at the Module Boundary
Racket's contract system turns unstated assumptions between modules into runtime-checked specifications — and when one fails, blame assignment tells you exactly which side broke the deal.