【发布时间】:2021-02-14 18:37:16
【问题描述】:
在Real World Haskell 的获取-使用-释放周期部分中,显示了bracket 的类型:
ghci> :type bracket bracket :: IO a -> (a -> IO b) -> (a -> IO c) -> IO c
现在,从description of bracket,我了解到a -> IO c 类型的函数正在运行时可能会引发异常。参考书上,这个异常是被调用函数捕获的,通过handle:
getFileSize path = handle (\_ -> return Nothing) $ bracket (openFile path ReadMode) hClose $ \h -> do size <- hFileSize h return (Just size)
我不禁想到,当 bracket 的第三个参数中确实发生异常时,bracket 不会返回 IO c。
纯度如何?
我认为答案可能正是this,但我不确定。
【问题讨论】:
标签: haskell exception functional-programming purely-functional io-monad