The following are two issues that I run into fairly regularly and are a surprising wart: putStrLn is not thread-safe is not thread-safe Channels cannot be closed Let me back up these claims, and then ask for some feedback on how to solve them.