导管异常
Conduit Exception
我不知道如何让 sourceDirectory
和 catchC
工作。
src = (sourceDirectory "/does/not/exist/input.txt" $$ C.print) `catchC` \e ->
yield (pack $ "Could not read input file: " ++ show (e :: IOException))
我的想法是我使用 sourceDirectory 遍历目录树,如果失败我希望程序继续而不是停止。
catchC
函数作用于管道的各个组件,例如 sourceDirectory "somedir"
(换句话说,ConduitM
类型的东西)。您已将它应用到 完全 运行 管道,这只是正常操作,因此 catchC
将不起作用。您的选择是:
- 将
catchC
应用于单个组件,例如(sourceDirectory "foo" `catchC` handler) $$ printC
- 使用非管道特定的
catch
函数(例如来自 safe-exceptions),例如(sourceDirectory "foo" $$ printC) `catch` handler
.
此外,对未来的建议:当某些代码无法构建时,包含编译器错误是个好主意。
我不知道如何让 sourceDirectory
和 catchC
工作。
src = (sourceDirectory "/does/not/exist/input.txt" $$ C.print) `catchC` \e ->
yield (pack $ "Could not read input file: " ++ show (e :: IOException))
我的想法是我使用 sourceDirectory 遍历目录树,如果失败我希望程序继续而不是停止。
catchC
函数作用于管道的各个组件,例如 sourceDirectory "somedir"
(换句话说,ConduitM
类型的东西)。您已将它应用到 完全 运行 管道,这只是正常操作,因此 catchC
将不起作用。您的选择是:
- 将
catchC
应用于单个组件,例如(sourceDirectory "foo" `catchC` handler) $$ printC
- 使用非管道特定的
catch
函数(例如来自 safe-exceptions),例如(sourceDirectory "foo" $$ printC) `catch` handler
.
此外,对未来的建议:当某些代码无法构建时,包含编译器错误是个好主意。