Inicialização de biblioteca insegura e FFI

Eu estou criando um módulo FFI para uma biblioteca em C que deseja que uma função não reentrante 1 vez seja chamada antes de qualquer outra coisa. Esta chamada é idempotente, mas com estado, então eu poderia chamá-la em todas as chamadas do Haskell. Mas é lento e, devido à não reentrância, pode causar conflitos.

Então, este é o momento certo para usar o unsafePerformIO? Eu poderia envolver um Bool em um IORef ou MVAR inseguro para tornar essas chamadas de inicialização idempotentes ignorando as chamadas subsequentes (chamadas em que o estado IORef oculto e global é False).

Se não, qual é o caminho certo para fazer isso?

questionAnswers(2)

yourAnswerToTheQuestion