streaming-bracketed-0.1.1.0: library/Streaming/Bracketed.hs
{-| A resource management decorator for `Stream`s.
'Stream's requiring resource allocation are lifted to values of type
`Bracketed`, which can be combined using an API that is more restricted
than that of the original 'Stream's and ensures prompt deallocation of
resources.
Values of type `Bracketed` can later be run by supplying a
'Stream'-consumer continuation to the 'with' function.
>>> :{
do -- boring setup stuff for a two-line text file
path <- (</> "streaming-bracketed-doctest.txt") <$> getTemporaryDirectory
exists <- doesPathExist path
when exists (removeFile path)
withFile path WriteMode (for_ ["aaa","bbb"] . hPutStrLn)
-- end of setup
let lineStream = R.linesFromFile utf8 nativeNewlineMode path
lines :> () <- R.with (R.over_ (S.take 1) lineStream *> R.over (S.map (map succ)) lineStream)
S.toList
return lines
:}
["aaa","bbb","ccc"]
-}
module Streaming.Bracketed (
-- * Bracketed
Bracketed
-- * Lifting streams
, clear
, bracketed
-- * Consuming bracketed streams with continuations
, with
, with_
-- * Transforming bracketed streams
, over
, over'
, over_
, for
-- * Reading text files
, linesFromFile
, concatRanges
) where
import Streaming
import Streaming.Bracketed.Internal
{- $setup
>>> import Data.Foldable
>>> import Control.Monad
>>> import System.IO
>>> import System.FilePath
>>> import System.Directory
>>> import Streaming
>>> import qualified Streaming.Prelude as S
>>> import qualified Streaming.Bracketed as R
-}