Discrimination is Wrong: Improving Productivity

This talk is a case study in library design in Haskell.

Fritz Henglein has shown through a number of excellent papers how to use “discrimination” to do lots of things in O(n): Sorting many more data types than you’d expect, table joins, etc.

In the process of optimizing this approach and wrapping it up in a form that can be easily consumed, we’ll take a lot of detours through the different ways you can think about code when optimizing Haskell.

  • We’ll need some category theory, from a deeper understanding of monoids to Day convolution.
  • We’ll need to consider final and initial encodings.
  • We’ll need to drift down to low level system concerns from building a custom foreign prim to nesting unsafePerformIO within unsafePerformIO.
  • We’ll need properties of laziness from productivity to IVars.

Along the way we’ll find and fix a small problem with the initial discrimination paper, which opens the door to streaming results, rather than having to wait until all the input is ready.


Target Audience




schedule Submitted 1 year ago