Способ избежать частого использования unsafePerformIO

Я часто нахожу этот шаблон в коде Haskell:

options :: MVar OptionRecord
options = unsafePerformIO $ newEmptyMVar

...

doSomething :: Foo -> Bar
doSomething = unsafePerformIO $ do
  opt <- readMVar options
  doSomething' where ...

По сути, у одного есть запись опций или что-то подобное, которые изначально устанавливаются в начале программы. Поскольку программист ленив, он не хочет переносить запись опций по всей программе. Он определяет MVar , чтобы сохранить его, что определяется некрасивым использованием unsafePerformIO . Программист гарантирует, что состояние устанавливается только один раз и перед выполнением любой операции. Теперь каждая часть программы должна снова использовать unsafePerformIO , просто чтобы извлечь параметры.

На мой взгляд, такая переменная считается прагматически чистой (не бейте меня ). Есть ли библиотека, которая абстрагирует эту концепцию и гарантирует, что переменная устанавливается только один раз, то есть что перед этой инициализацией не выполняется никаких вызовов и что не нужно писать unsafeFireZeMissilesAndMakeYourCodeUglyAnd DisgustingBecauseOfThisLongFunctionName

16
задан crockeea 24 May 2014 в 03:58
поделиться