Check for singletons when creating Bag/OrdList from a list.
authorklebinger.andreas@gmx.at <klebinger.andreas@gmx.at>
Sun, 3 Jun 2018 01:18:19 +0000 (21:18 -0400)
committerBen Gamari <ben@smart-cactus.org>
Sun, 3 Jun 2018 03:21:00 +0000 (23:21 -0400)
commit18cb4f5e1b88aef7770446a354bfcc1e0a075e89
tree67784d663a44400b418d35f5ac5a38f8f39acef9
parentac91d07399207f4e22467bea3577cafd27a937d7
Check for singletons when creating Bag/OrdList from a list.

This gives us `One x` instead of `Many (x : [])` reducing overhead.
For compiling spectral/simple with -O0 difference was ~ -0.05%
allocations.

The only drawback is that something like toOL (x:panic "") will now
panic.  But that seems like a reasonable tradeoff.

Test Plan: ci, looking at +RTS -s

Reviewers: bgamari, jmct

Reviewed By: bgamari

Subscribers: jmct, rwbarton, thomie, carter

Differential Revision: https://phabricator.haskell.org/D4770
compiler/utils/Bag.hs
compiler/utils/OrdList.hs