在使用Conduit进行编程时,我们何时使用runResourceT

时间:2014-05-03 21:20:25

标签: haskell

{-#LANGUAGE OverloadedStrings#-}
module Main where

import Conduit

main = (sourceRandomN 10 :: Producer IO Int) $$ printC

这样可行但是对于以下内容我需要添加runResourceT。为什么?

{-#LANGUAGE OverloadedStrings#-}
module Main where

import Conduit

main = runResourceT (sourceDirectoryDeep False "/home/bjorn/dev"  $$ printC)

1 个答案:

答案 0 :(得分:2)

您应该查看the ResourceT overview以了解资源的目的。简短的回答是,它可以让您安全地获取基于延续的monad中的资源,通常无法安全地处理异常。

对于sourceDirectoryDeep,问题是我们需要安全地打开和关闭目录流,这样如果在处理过程中抛出异常,所有当前打开的句柄都会关闭。