Often, structured imperative programming approaches functional programming’s goals
of circumscribing I/O. Good design might require that input and output only happens in
a limited set of appropriately named functions. Less structured programming tends to
read and write to STDIO, files, graphic devices, etc., all over the place and in a way that
is difficult to predict. Functional programming takes the circumscription to a much
higher level.