-- | Shh provides a shell-like environment for Haskell.
module Shh
    ( initInteractive
    -- | == Constructing a `Proc`
    -- You will rarely have to use these as most of the time these are
    -- created for you by using the `loadEnv` template Haskell function.
    , exe
    , mkProc
    , runProc
    , Proc()
    -- | == Piping and Redirection
    , PipeResult(..)
    , Stream(..)
    , devNull
    -- === Lazy/Streaming reads
    -- These reads are lazy. The process is run long enough to produce
    -- the amount of output that is actually used. It is therefor suitable
    -- for use with infinite output streams. The process is terminated
    -- as soon the function finishes. Note that the result is forced to
    -- normal form to prevent any accidental reading after the process has
    -- terminated.
    , withReadSplit0
    , withReadLines
    , withReadWords
    -- | === Strict reads
    , readProc
    , readTrim
    , readSplit0
    , readLines
    , readWords
    , readAuto
    -- | === Writing to @stdin@
    , (<<<), (>>>)
    , readWriteProc
    , apply
    -- | === String manipulation
    -- Utility functions for dealing with common string issues in shell
    -- scripting.
    , trim
    , split0
    -- | == Exceptions
    -- If any exception is allowed to propagate out of a pipeline, all the
    -- processes comprising the pipeline will be terminated. This is contrary
    -- to how a shell normally works (even with @-o pipefail@!).
    , Failure(..)
    , ignoreFailure
    , catchFailure
    , catchCode
    -- | == Constructing Arguments
    , ExecArg(..)
    , ExecArgs()
    , Unit()
    -- | == Template Haskell helpers
    , ExecReference(..)
    , load
    , loadEnv
    , loadAnnotated
    , loadAnnotatedEnv
    , loadExe
    , loadExeAs
    ) where

import Shh.Internal