Unbox the `SetM` array (#528)
authorDavid Feuer <David.Feuer@gmail.com>
Tue, 6 Feb 2018 23:08:12 +0000 (18:08 -0500)
committerGitHub <noreply@github.com>
Tue, 6 Feb 2018 23:08:12 +0000 (18:08 -0500)
commitcfb136731bc5c182e005b21a2dd857fd8c9694df
tree992d8932359a090ea4a2718d7a6a7b8ff9a86cef
parent84d6480009fa3bc79e72dcd1e212789fe258380e
Unbox the `SetM` array (#528)

`Data.Graph` uses a mutable array to track which vertices have
been visited. This was implemented using an `STArray s Vertex Bool`.
This is obviously bad, because the garbage collector will have to
trace the array if it's alive during a collection. Using an unboxed
array instead should always be better. Indeed, doing so will also
dramatically reduce the size of the array, from the number of
vertices in the graph to that divided by the word size. Each array
operation is slightly more complex, but we'll surely win from
memory locality and such anyway.
Data/Graph.hs