Я часто нахожу этот шаблон в коде Haskell:
options :: MVar OptionRecord
options = unsafePerformIO $ newEmptyMVar
...
doSomething :: Foo -> Bar
doSomething = unsafePerformIO $ do
opt <- readMVar options
doSomething' where ...
В принципе, есть запись параметров или что-то подобное, которое изначально устанавливается в начале программы. Поскольку программист ленив, он не хочет переносить запись options по всей программе. Он определяет MVar, чтобы сохранить его, определяемый уродливым использованием unsafePerformIO. Программист гарантирует, что состояние устанавливается только один раз и до того, как произойдет какая-либо операция. Теперь каждая часть программы должна снова использовать unsafePerformIO, просто чтобы извлечь параметры.
По-моему, такая переменная считается прагматически чистой (не бить меня). Существует ли библиотека, которая абстрагирует эту концепцию и гарантирует, что переменная задана только один раз, то есть, чтобы до инициализации не выполнялся вызов, и что не нужно писать unsafeFireZeMissilesAndMakeYourCodeUglyAnd DisgustingBecauseOfThisLongFunctionName