Оптимизирована ли моя переписанная функция foldl?

Я только что запустил Haskell 2 дня назад, так что я еще не уверен, как оптимизировать мой код.

В качестве упражнения я переписалfoldl а такжеfoldr ( Я дамfoldl здесь, ноfoldr то же самое, заменивlast сhead а такжеinit сtail).

Код является:

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)
        ) )

Единственное, что меня беспокоит, это то, что я подозреваю, что Haskell не может применить здесь оптимизацию хвостового вызова, потому что рекурсивный вызов не выполняется в конце функции.

Как я могу сделать этот хвостовой вызов оптимизированным? Является ли Haskell встроенной реализациейfoldl Реализовано ли иначе?

Ответы на вопрос(2)

Ваш ответ на вопрос