unsafePerformIO- und FFI-Bibliotheksinitialisierung
Ich erstelle ein FFI-Modul für eine Bibliothek in C, in der eine einmalige, nicht wiedereintrittsfähige Funktion aufgerufen werden soll, bevor etwas anderes aufgerufen wird. Dieser Anruf ist idempotent, aber zustandsbehaftet, sodass ich ihn einfach bei jedem Haskell-Anruf anrufen kann. Aber es ist langsam und kann aufgrund von Nichteintritt zu Konflikten führen.
Ist dies der richtige Zeitpunkt, um unsafePerformIO zu verwenden? Ich könnte einen Bool in ein unsicheres IORef oder MVar einwickeln, um diese Initialisierungsaufrufe durch Ignorieren nachfolgender Aufrufe (Aufrufe, bei denen der globale, verborgene IORef-Status "False" ist) als idempotent zu kennzeichnen.
Wenn nicht, wie geht das richtig?