Minha função folded reescrita está otimizada?

Eu acabei de começar o Haskell 2 dias atrás, então ainda não tenho certeza sobre como otimizar meu código.

Como exercício, reescrevifoldl efoldr ( Eu dareifoldl aqui masfoldr é o mesmo, substituindolast comhead einit comtail).

O código é:

module Main where

    myFoldl :: ( a -> ( b -> a ) ) -> a -> ( [b] -> a )

    myFoldl func = ( \x -> (\theList
        -> if (length theList == 0) then
            x
        else
            myFoldl func (func x (last theList) ) (init theList)
        ) )

Minha única preocupação é que eu suspeito que Haskell não pode aplicar a otimização da chamada de ponta aqui porque a chamada recursiva não é feita no final da função.

Como posso tornar esta ligação otimizada? A implementação incorporada de Haskell éfoldl implementado de forma diferente para o meu?

questionAnswers(2)

yourAnswerToTheQuestion