>>21Have you read
Beautiful Concurrency? I found STM to be a great example of controlled effects, monads and Haskell's type system. E.g. a function of type
STM a cannot make any IO side-effects because the type system stops you at compile time, it can only read or write to
TVars.