A talk presented at the weekly Galois Developer Symposium.

The source of the talk and examples are all online.

This talk shows two areas relating to evaluation strategies in Haskell, and how they can subtly interact with threads, synchronization and performance. In addition, we briefly look at the interaction with asynchronous exceptions.

In particular,

Be careful with lazy values in synchronization variables

Consider using the strict-concurrency package for synchronization

All modify* functions should be very very carefully used

Interactions between async exceptions (e.g. block/killThread) and threads need expert eyes.