This series is a rather lazy exploration of how to work with sparse data in Morton order. Along the way we'll be composing a number of useful data structures and twiddling a lot of bits.

### Revisiting Matrix Multiplication

As of March 2020, School of Haskell has been switched to read-only mode.

#### Part I: Bit Shuffling with Lenses and Isomorphisms 25 Aug 2013Edward Kmett

This post shows how we can define Morton Order via bit shuffling operations.#### Part II: The Zen of Z-Ordering 25 Aug 2013Edward Kmett

This post shows how you can perform bit shuffling by not actually shuffling at all.#### Part III: Extending Vector 25 Aug 2013Edward Kmett

This post is an exploration of how to extend the Vector package with hybrid vectors and custom stream fusion combinators.#### Part IV: IntMap!? 25 Aug 2013Edward Kmett

This post explores how you can use the notion of a "most significant difference" to power a data structure like the venerable Data.IntMap.#### Part V: Heaps of Performance 16 Nov 2014Edward Kmett

This post focuses on introducing pairing heaps and how to bootstrap a data structure.#### Part VI: A Most Significant Comparison 25 Aug 2013Edward Kmett

This post summarizes what we've learned so far about Morton ordering, and compacts all of the bit twiddling of the first 2 parts into a `compare` like operator for most significant bits.