ImmutabilityPurityHigher-order functionsPattern matchingRecursionPolymorphismAlgebraic data typesTotality