Ogólnie unika się foldl
na rzecz foldl'
lub foldr
. Cytowanie Real World Haskell:Dlaczego niektóre funkcje Prelude są zdefiniowane w kategoriach foldl?
Ze względu na zachowanie thunking z foldl, że jest mądry, aby uniknąć tego funkcję w rzeczywistych programów: nawet jeśli nie powiedzie wprost, to być niepotrzebnie nieefektywne. Zamiast tego zaimportuj Data.List i użyj foldl '.
Jednak niektóre funkcje Prelude są zdefiniowane pod tym względem (np. (\\)
i unionBy
). Dlaczego to? Czy nie należy wprowadzać zbyt wiele rygorów w tych funkcjach?
Uwaga: analiza ścisłości w GHC oznacza, że 'foldl' działa lepiej niż mogłoby się wydawać zaskakująco często. – singpolyma
Ściśle mówiąc, '(\\)' i 'unionBy' nie znajdują się w Preludium. – sdcvvc