-- | /O(n)/. A strict version of 'foldl'. Each application of the operator is
-- evaluated before using the result in the next application. This
-- function is strict in the starting value.
foldl' :: (a -> b -> a) -> a -> Set b -> a
foldl' f z = go z
  where
    STRICT_1_OF_2(go)
    go z' Tip           = z'
    go z' (Bin _ x l r) = go (f (go z' l) x) r

foldl' :: (a -> b -> a) -> a -> Set b -> a
foldl' f z = go z
  where
    STRICT_1_OF_2(go)
    go z' Tip           = z'
    go z' (Bin _ x l r) = go (f (go z' l) x) r

foldl' f z = go z
  where
    STRICT_1_OF_2(go)
    go z' Tip           = z'
    go z' (Bin _ x l r) = go (f (go z' l) x) r
