Czy moja przepisana funkcja foldl została zoptymalizowana?

Właśnie zacząłem Haskell 2 dni temu, więc nie jestem jeszcze pewien, jak zoptymalizować mój kod.

Jako ćwiczenie przepisałemfoldl ifoldr ( Ja damfoldl tutaj alefoldr jest taki sam, zastępująclast zhead iinit ztail).

Kod to:

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

Moim jedynym zmartwieniem jest to, że podejrzewam, że Haskell nie może tutaj zastosować optymalizacji połączeń ogonowych, ponieważ wywołanie rekurencyjne nie jest wykonywane na końcu funkcji.

Jak mogę zoptymalizować to połączenie ogonowe? Czy wbudowana implementacja Haskellafoldl realizowany inaczej niż mój?

questionAnswers(2)

yourAnswerToTheQuestion