first order functions
no self reference
linear
do not take other functions as arguments
higher order functions
take other functions as arguments
returns functions as a result
how are comupations described in FP
list of equations that relate inputs to outputs
Strict evaluation
evaulates arguments before calling the functions
lazy evaluation
evaluates arguments only when they’re needed and about to be used
Haskell - no shared expression is evaluated more than once