【问题标题】:Better way to report locked file in Haskell在 Haskell 中报告锁定文件的更好方法
【发布时间】:2017-04-19 14:29:09
【问题描述】:

我想锁定一个在 Haskell 中独占使用的文件,并在它已经被锁定的情况下抛出一个 IOError

import Data.Maybe (fromMaybe)
import System.FileLock (FileLock, SharedExclusive (Exclusive), tryLockFile)

-- ...
do
  -- ...
  maybeFileLock <- tryLockFile path Exclusive -- returns Maybe FileLock
  let fileLock = fromMaybe (throwIO (userError "File locked")) maybeFileLock

有没有更好的方法来处理Maybe,如果它是Nothing,就抛出一个异常?我可以将这两行合二为一吗?

注意:有人可能会争辩说,这些行的任何组合都会使意图变得不那么清晰。

【问题讨论】:

  • 您的示例代码无效。它有一个类型错误。

标签: haskell exception-handling maybe


【解决方案1】:
fileLock <- fromMaybe (throwIO (userError "File locked"))
  <$> tryLockFile path Exclusive

但是throwIO :: Exception e =&gt; e -&gt; IO a,所以这和你的代码应该在FileLockIO a之间不匹配。而是:

fileLock <- maybe (throwIO (userError "File locked")) pure
  =<< tryLockFile path Exclusive

【讨论】:

  • 那行得通。谢谢。我在尝试编译时意识到类型不匹配,但仍在研究如何修复它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-06
  • 2017-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多