Как удалить Афф (похожий на 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.

Другие вопросы по тегам