One of the classic examples that keeps coming up when talking about dependently typed programming languages is the “safe” printf function – one that ensures that the number and type of arguments match the requirement in the format specification. In languages like Idris, this is just a function that takes a format string, and returns the type of arguments required for constructing the formatted out