指令式编程的步骤序列的运算，更加蠢笨和更不简洁。这些语言通常结合某种机制，使得这些任务更加容易而又保持语言的纯函数式性质，比如和单子。要求表达式是纯函数的，也就是表达式的值对于相同的输入也必须是相同的，它的求值不能有副作用。在函数式编程中，很少使用副作用。缺少副作用导致程序易于形式验证。函数式语言比如Standard ML、Scheme和Scala不限制副作用，但是编程者会习惯性的避免使用它们。函数式语言Haskell使用单子行动来表达副作用，比如输入/输出和其他有状态的计算。