如何去掉一个Aff(类似Eff的unsafePerformEff)?

How to remove a Aff (similar to 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

所以我想获得 LeftRight 值。如果它在哪里 Eff 而不是 Aff 我可以使用

let x = unsafePerformEff $ myFile "someFile.txt"

谢谢

您永远不应该尝试使用 unsafePerformEff 来 "get at" 值,因为这样确实不安全,并且会在任何更大的代码库中引入严重的错误。

相反,您可以使用 do 符号来 "get at" 值。例如:

do
  result <- attempt $ readTextFile Node.Encoding.UTF8
  case result of 
    Left  error -> ...
    Right file  -> ...
  ...

请注意,不存在 unsafePerformAff,因为计算是异步的,无法在 Javascript 运行时中阻塞。