import Debug.Trace

foldlT :: (Show a) => (a -> b -> a) -> a -> [b] -> a
foldlT f z []     = z
foldlT f z (x:xs) = let i = f z x
                    in  trace ("now " ++ show i) foldlT f i xs

foldl' :: (a -> b -> a) -> a -> [b] -> a
foldl' f z []     = z
foldl' f z (x:xs) = let i = f z x
                    in  i `seq` foldl' f i xs

