← All notes

Desugaring foldM in Haskell

The function foldM from Control.Monad (or equivalently foldlM from Data.Foldable) desugars to

foldlm _ z [] = pure z
foldlm f z (x : xs) = f z x >>= \z' -> foldlm f z' xs