Dependent types in practical programming | Synapse