Как удалить Афф (похожий на Eff's unsafePerformEff)?
Я пытаюсь заполучить содержимое некоторых файлов, которые я прочитал из файла через Node.FS.Aff.readTextFile, используя асинхронные эффекты.
Однако мой вопрос носит более общий характер.
myFile::forall r. String -> Aff ( fs :: FS | r) (Either Error String)
myFile file = attempt $ readTextFile Node.Encoding.UTF8 file
Так что я хочу попасть на Left
или же Right
значение. Если это где Eff
вместо Aff
Я мог бы использовать
let x = unsafePerformEff $ myFile "someFile.txt"
Спасибо
1 ответ
Решение
Вы никогда не должны пытаться "получить" значение с помощью unsafePerformEff
, как таковой действительно небезопасен и внесет серьезные ошибки в любую большую кодовую базу.
Вместо этого вы можете использовать do
запись, чтобы "получить" значения. Например:
do
result <- attempt $ readTextFile Node.Encoding.UTF8
case result of
Left error -> ...
Right file -> ...
...
Обратите внимание, что не существует unsafePerformAff
, потому что вычисления асинхронные, и нет способа блокировать во время выполнения Javascript.