id,summary,reporter,owner,description,type,status,priority,milestone,component,version,resolution,keywords,cc,os,architecture,failure,testcase,blockedby,blocking,related,differential
3271,New methods for Data.Sequence,LouisWasserman,LouisWasserman,"`Data.Sequence` is meant as a general-purpose implementation of finite sequences. The range of methods it offers, however, is considerably more constrained than `Data.List`, even allowing for the constraint that sequences are finite.
The following methods cannot be efficiently implemented based on currently exported methods from `Data.Sequence`.
* `zipWith` and its variants. Note: it suffices to define `zipWith` alone.
* `replicate`. (This can be implemented in `O(log n)` time with node sharing.)
The following methods are relatively simple extensions of already-exported methods. It may be more appropriate to allow library users to reimplement them themselves.
* `scanl`, `scanr`, and variants. This is relatively straightforward using methods borrowed from the `Traversable` instance.
* `tails` and `inits`. `tails` is equivalent to `scanr (<|) empty`; `inits` is similar.
* `takeWhile`, `dropWhile`, `span`, `break` (and perhaps from-the-end variations). Finding a breakpoint index can be done as efficiently on lists as on sequences; find the appropriate breakpoint index after converting to a list and use `splitAt`.
* `unfoldr` and `iterate`, though the latter would require a finite number of iterations to perform.
* `partition`. I can conceive of a slightly more efficient implementation than the trivial one, but the gains may be minimal.",proposal,closed,normal,Not GHC,libraries (other),,fixed,,,Unknown/Multiple,Unknown/Multiple,,,,,,