Inicialización de bibliotecas unsafePerformIO y FFI
Estoy creando un módulo FFI para una biblioteca en C que quiere que se llame una función no reentrante una vez antes de que se haga otra cosa. Esta llamada es idempotente, pero estable, por lo que podría llamarlo en cada llamada de Haskell. Pero es lento y, debido a la falta de reingreso, podría causar conflictos.
Entonces, ¿es este el momento adecuado para usar unsafePerformIO? Podría envolver un Bool en un IORef o MVar inseguro para hacer que estas llamadas de inicialización sean idempotentes al ignorar las llamadas subsiguientes (llamadas en las que el estado global y oculto de IORef es Falso).
Si no, ¿cuál es la forma correcta de hacer esto?