¿Haskell tiene optimización de cola recursiva?

Descubrí el comando "time" en Unix hoy y pensé que lo usaría para verificar la diferencia en los tiempos de ejecución entre las funciones recursivas de la cola y las funciones recursivas normales en Haskell.

Escribí las siguientes funciones:

--tail recursive
fac :: (Integral a) => a -> a
fac x = fac' x 1 where
    fac' 1 y = y
    fac' x y = fac' (x-1) (x*y) 

--normal recursive
facSlow :: (Integral a) => a -> a
facSlow 1 = 1
facSlow x = x * facSlow (x-1)

Estos son válidos teniendo en cuenta que eran únicamente para usar con este proyecto, por lo que no me molesté en verificar los ceros o los números negativos.

Sin embargo, al escribir un método principal para cada uno, compilarlos y ejecutarlos con el comando "time", ambos tenían tiempos de ejecución similares con losnormal Función recursiva superando la cola recursiva. Esto es contrario a lo que había escuchado con respecto a la optimización recursiva de cola en lisp. ¿Cuál es la razón de esto?

Respuestas a la pregunta(4)

Su respuesta a la pregunta