In pure functions, Inputs are declared as inputs and aren’t ever hidden. Outputs are also declared as outputs, and each time the output is the same if given the same parameters. They act on their parameters and are inefficient if they’re not returning anything. In impure functions, at least some inputs and outputs are hidden, and since they have dependencies, they cannot be used or tested separately.