El artículo explica las diferencias fundamentales entre las funciones foldl y foldr en el lenguaje Haskell, aclarando que ambas recorren la estructura de la misma izquierda a derecha, pero difieren en su asociatividad. En lenguajes estrictos, foldl permite una recursión en cola que consume espacio constante, mientras que foldr requiere crear n marcos de pila para una lista de longitud n, consumiendo espacio lineal. En lenguajes perezosos como Haskell, la evaluación ocurre desde el exterior hacia el interior. Una foldl perezosa puede generar una cadena de thunks lineal en el tamaño de la entrada, degradando el algoritmo de espacio constante a lineal. Para evitar esto, se utiliza foldl', que fuerza la evaluación del acumulador antes de avanzar, manteniendo el consumo de espacio constante. Por el contrario, foldr perezoso no genera thunks anidadas grandes; en operaciones estrictas, solo se requiere que la lista esté completa para evaluar el resultado, mientras que en operaciones perezosas, el resultado puede estar en forma normal débil (WHNF) sin necesidad de evaluar el resto de la lista. Este artículo, reproducido del blog de Alexis King, sirve como referencia didáctica para entender el comportamiento de estas funciones en contextos de evaluación estricta y perezosa.
