You build your system as a box that takes strings in and sends strings out. You then have to do a bunch of checks (as part of your de&#x2F;serializing) <i>at the boundaries only</i>. Inside the box, all your logic and transformations are type safe, and indeed you can turn some logic issues into mechanically checked type-level issues, which are basically free unit tests.