There are approaches to manage the complexity of computations. We talked about some of them in previous chapters; here we will explain why they are used in large-scale design. We will also discuss new approaches and provide some examples.
The Type System
The type system is used to enforce abstractions and to simplify the interactions between the programmer and the environment. It imposes key invariants through types and ensures safety through checked exceptions (using Maybe