{- | Fully-strict version of "Data.Sequence" Unlike "Data.Sequence" t'Data.Sequence.Seq' the instances of our {- haddock #1251 -} t'Data.Strict.Sequence.Seq' are all strict as well. You should be able to switch from the former simply by changing your module imports, and your package dependency from @containers@ to @strict-containers@. If this doesn't work, please file a bug. The documentation in the auto-generated modules have not been updated in a particularly sophisticated way, so may sound weird or contradictory. In those cases, please re-interpret such weird wording in the context of the above. == Detailed note on laziness 'Seq' uses internal laziness for performance; and our data structure preserves this laziness and performance in a way that retains the strictness of values. For technical details, see the source code of our patch. As a user of the data structure, what you need to know is that: * Strictness is guaranteed when constructing containers - values added to a container are evaluated /before/ the new, larger, container itself is evaluated. * Laziness and performance applies when splitting or combining existing containers, whose values have already been evaluated as per the previous point. == Bugs One known bug, is that whole-container transforms (such as @fmap@) are not entirely strict, since they make use of the lazy behaviour above to avoid doing work that is unnecessary (in the lazy case) to a large part of the data structure. This is possible to fix, by re-implementing all such transforms so that they force the lazy parts as well; we just haven't gotten around to it yet. (This would revert the performance back to @O(n)@, but this is unavoidable since all such transforms on strict data structures must inherently evaluate every single element.) -} module Data.Strict.Sequence ( module Data.Strict.Sequence.Autogen ) where import Data.Strict.Sequence.Internal import Data.Strict.Sequence.Autogen