This is not a proposal. I know that for reasons I don't know, the decision was made to move extra-strict functions for the other containers into separate .Strict modules. I greatly dislike the result of that decision (both from the API standpoint and especially from a maintenance standpoint), but I'm not arguing to change that.

However, I am adding an extra-strict function to Data.Sequence, with the following non-negotiable semantics:

adjust' f i xs =
  case xs !? i of
    Nothing -> xs
    Just x -> let !x' = f x in update i x' xs

This will provide an efficient way to adjust a sequence element without risking thunk chains and memory leaks.

I'm sure some people will be angry. I just wanted to make sure no one says I snuck this in behind their back.