导管异常

Conduit Exception

我不知道如何让 sourceDirectorycatchC 工作。

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.

此外,对未来的建议:当某些代码无法构建时,包含编译器错误是个好主意。