Use ScopedTypeVariables to optimize zipping (#280)
authorDavid Feuer <David.Feuer@gmail.com>
Wed, 1 Jun 2016 23:37:28 +0000 (19:37 -0400)
committerDavid Feuer <David.Feuer@gmail.com>
Wed, 1 Jun 2016 23:37:28 +0000 (19:37 -0400)
commitc37a5bb59228f7976792dc1a2013a2442f39b41b
tree4f16d132df14f534693eb8b4b3a144c0a6371a43
parent068c970370ad467fc042423f377a842866ff5e57
Use ScopedTypeVariables to optimize zipping (#280)

`splitMap` was annoyingly sensitive to any minor change anywhere,
presumably because it was tough on the inliner. Using
`ScopedTypeVariables` when compiling with GHC, we can pull the
splitting function out of the polymorphic recursion. Suddenly
GHC starts unboxing `Int`s and generally acting like a happier
compiler. I'm hopeful that `ScopedTypeVariables` will be in the
next standard so we can eventually drop the other code.

Also, modify the `Split` type to make it more obvious that we
only force things we're allowed to.

Also also, make `chunksOf` a bit more tolerant. Now it only
complains if it's asked to produce non-positive-sized chunks
of a non-empty sequence.
Data/Sequence.hs