Преамбула
Это один из тех вопросов, когда я думаю, что кто-то уже решил мою проблему, но я не знаю, где искать.
Вопрос
Я ищу MonadTransformer, который несет в себе идею быть полным или неполным таким образом, что действие стека монады не сможет проверить тип, если оно не завершено.
Моя ситуация
У меня есть стек Monad с состоянием, которое содержит MVar. Невозможность записи в этот MVar вызовет исключение thread blocked indefinitely in an MVar
. Я мог бы просто проверить сам MVar, но передача его другому потоку (который следует тем же правилам) также является допустимым способом заполнения MVar (как и выдача ошибки).
Я ищу способ, чтобы средство проверки типов выдавало ошибку, если одно из этих условий не выполняется к моменту запуска монады. Я могу проверить во время выполнения, но я думаю, что может быть способ использовать систему типов.