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

rob*_*kuz 2 purescript

我试图通过Node.FS.Aff.readTextFile获取我从文件中读取的一些文件内容,因此使用异步效果.

但是我的问题更为笼统.

myFile::forall r. String -> Aff ( fs :: FS | r) (Either Error String)
myFile file = attempt $ readTextFile Node.Encoding.UTF8 file
Run Code Online (Sandbox Code Playgroud)

所以我想得到Left或者Right价值.如果它在哪里Eff而不是Aff我可以使用

let x = unsafePerformEff $ myFile "someFile.txt"
Run Code Online (Sandbox Code Playgroud)

谢谢

Joh*_*oes 5

你永远不应该试图通过使用来"获取"这个值unsafePerformEff,因为它确实是不安全的,并且会在任何更大的代码库中引入严重的错误.

相反,您可以使用do符号来"获取"值.例如:

do
  result <- attempt $ readTextFile Node.Encoding.UTF8
  case result of 
    Left  error -> ...
    Right file  -> ...
  ...
Run Code Online (Sandbox Code Playgroud)

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