如何删除Aff(类似于Eff' unsafePerformEff)?

时间:2016-02-16 13:47:50

标签: purescript

我试图通过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"

由于

1 个答案:

答案 0 :(得分:5)

你永远不应该试着去"使用unsafePerformEff的值是非常不安全的,并且会在任何更大的代码库中引入严重的错误。

相反,您可以使用do符号来"得到"价值。例如:

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

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