Есть ли веская причина, почему функция check
в библиотеке Contol.Concurent.STM
имеет тип Bool -> STM a
и возвращает undefined
при успехе, а не имеет тип Bool -> STM ()
? В таком виде проверка типов будет политкорректно компилировать блок do, заканчивающийся check foo
, а во время выполнения выдаст ошибку *** Exception: Prelude.undefined
.