Summary

We began this chapter with GHC primitives such as Int# and figured out the effects of strictness and unpacking annotations (bangs and UNPACK-pragmas) in data type definitions. We noted that tuples are lazy and that Bool is an algebraic data type, but we also noted that arrays and vectors represent Bool intelligently as single bits internally.

Then we considered working with numeric, binary, and textual data. We witnessed the performance of the bytestring, text, and vector libraries, all of which get their speed from fusion optimizations, in contrast to linked lists, which have a huge overhead despite also being subject to fusion to some degree. However, linked lists give rise to simple difference lists and zippers. The builder patterns ...

Get Haskell High Performance Programming now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.