-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Some monad transformers and typeclasses to simplify I/O on a transformer stack.
--
-- Some monad transformers and typeclasses for text in- and output on a
-- function scope, including features like here-strings, file
-- redirection, pipes and string expansion. Works best on a transformer
-- stack.
@package chatty
@version 0.5.3.1
-- | Provides typeclasses for clocks and randomizer environments
module System.Chatty.Misc
-- | Typeclass for all monads that know the time
class (Functor m, Monad m) => MonadClock m where mgetstamp = fmap (flip diffUTCTime (UTCTime (fromGregorian 1970 1 1) (secondsToDiffTime 0))) mutctime
mutctime :: MonadClock m => m UTCTime
mgetstamp :: MonadClock m => m NominalDiffTime
-- | Typeclass for all monads that may provide random numbers
class Monad m => MonadRandom m
mrandom :: (MonadRandom m, Random r) => m r
mrandomR :: (MonadRandom m, Random r) => (r, r) -> m r
instance MonadRandom IO
instance MonadClock IO
module Text.Chatty.Templates
-- | Returns a TypeQ from a name
strToType :: Name -> Q Type
-- | Provides handle-closing.
module Text.Chatty.Finalizer
-- | Class for all handle-finalizing monads. Required for file
-- redirections.
class Monad m => MonadFinalizer m where mqfhs = foldr ((>>) . mqfh) (return ())
mqfh :: MonadFinalizer m => Handle -> m ()
mqfhs :: MonadFinalizer m => [Handle] -> m ()
mfin :: MonadFinalizer m => m ()
-- | Handle-closing transformer
newtype HandleCloserT m a
HandleCloser :: ([Handle] -> m (a, [Handle])) -> HandleCloserT m a
runHandleCloserT :: HandleCloserT m a -> [Handle] -> m (a, [Handle])
-- | Run function with handle closer
withLazyIO :: (MonadIO m, Functor m) => HandleCloserT m a -> m a
instance MonadIO m => MonadFinalizer (HandleCloserT m)
instance MonadIO m => MonadIO (HandleCloserT m)
instance Monad m => Functor (HandleCloserT m)
instance MonadTrans HandleCloserT
instance Monad m => Monad (HandleCloserT m)
-- | Provides a typeclass for all monads that may scan text.
module Text.Chatty.Scanner
-- | A typeclass for all monads that may read input.
class Monad m => MonadScanner m where mscanh = return Nothing
mscan1 :: MonadScanner m => m Char
mscanL :: MonadScanner m => m String
mscannable :: MonadScanner m => m Bool
mscanh :: MonadScanner m => m (Maybe Handle)
mready :: MonadScanner m => m Bool
-- | HereStringT holds a given string and uses it as input for the function
-- (much like here-strings in the shell)
newtype HereStringT m a
HereString :: (String -> m (a, String)) -> HereStringT m a
runHereStringT :: HereStringT m a -> String -> m (a, String)
-- | QuietT does not convey any input (much like <devnull in the
-- shell)
newtype QuietT m a
Quiet :: m a -> QuietT m a
runQuietT :: QuietT m a -> m a
-- | InRedirT redirects all input to a given handle (much like <filename
-- in the shell)
newtype InRedirT m a
InRedir :: (Handle -> m (a, Handle)) -> InRedirT m a
runInRedirT' :: InRedirT m a -> Handle -> m (a, Handle)
-- | InRedirT on an IO monad
type InRedir = InRedirT (HandleCloserT IO)
-- | Run InRedirT with handle
runInRedirT :: Functor m => InRedirT m a -> Handle -> m a
-- | Run InRedir with handle
runInRedir :: InRedir a -> Handle -> IO a
-- | Run InRedirT with a filename
runInRedirFT :: (Functor m, MonadIO m, MonadFinalizer m) => InRedirT m a -> FilePath -> m a
-- | Run InRedir with a filename
runInRedirF :: InRedir a -> FilePath -> IO a
-- | Line-scanning alternative to mscan1/L
mscanLn :: MonadScanner m => m String
-- | Scan a fixed number of chars
mscanN :: MonadScanner m => Int -> m String
-- | Redirection source that does not provide any output
data EmptyI
EmptyI :: EmptyI
-- | Class for all primitive redirection sources.
class RedirectionSource t mt a r | t -> mt, t a -> r
(.<.) :: (RedirectionSource t mt a r, MonadFinalizer m, Functor m, MonadIO m, MonadScanner (mt m)) => mt m a -> t -> m a
-- | Class for all Here-Documents
class RedirectionHeredoc t mt a r | t -> mt, t a -> r
(.<<.) :: (RedirectionHeredoc t mt a r, Functor m, MonadScanner (mt m)) => mt m a -> t -> m a
instance RedirectionHeredoc String HereStringT a a
instance RedirectionSource FilePath InRedirT a a
instance RedirectionSource EmptyI QuietT a a
instance MonadFinalizer m => MonadFinalizer (InRedirT m)
instance Monad m => Functor (InRedirT m)
instance MonadIO m => MonadScanner (InRedirT m)
instance MonadIO m => MonadIO (InRedirT m)
instance MonadTrans InRedirT
instance Monad m => Monad (InRedirT m)
instance Functor m => Functor (QuietT m)
instance Monad m => MonadScanner (QuietT m)
instance MonadTrans QuietT
instance Monad m => Monad (QuietT m)
instance MonadFinalizer m => MonadFinalizer (HereStringT m)
instance MonadIO m => MonadIO (HereStringT m)
instance Monad m => MonadScanner (HereStringT m)
instance Monad m => Functor (HereStringT m)
instance MonadTrans HereStringT
instance Monad m => Monad (HereStringT m)
instance Monad m => MonadScanner (StateT String m)
instance MonadScanner IO
-- | Provides a typeclass for all monads that may print text.
module Text.Chatty.Printer
-- | A typeclass for all monads that may output strings.
class Monad m => MonadPrinter m where mnoecho = mprint mflush = return () mnomask = mprint
mprint :: MonadPrinter m => String -> m ()
mnoecho :: MonadPrinter m => String -> m ()
mflush :: MonadPrinter m => m ()
mnomask :: MonadPrinter m => String -> m ()
-- | DeafT discards all output (much like >/dev/null in the shell)
newtype DeafT m a
Deaf :: m a -> DeafT m a
runDeafT :: DeafT m a -> m a
-- | Redirects all output to a given handle (much like >filename in the
-- shell)
newtype OutRedirT m a
OutRedir :: (Handle -> m (a, Handle)) -> OutRedirT m a
runOutRedirT' :: OutRedirT m a -> Handle -> m (a, Handle)
-- | OutRedirT on a blank IO monad
type OutRedir = OutRedirT IO
-- | Run OutRedirT with a Handle
runOutRedirT :: Functor m => OutRedirT m a -> Handle -> m a
-- | Run OutRedir with a Handle
runOutRedir :: OutRedir a -> Handle -> IO a
-- | Run OutRedirT with a FilePath
runOutRedirFT :: (Functor m, MonadIO m) => OutRedirT m a -> FilePath -> IOMode -> m a
-- | Run OutRedir with a FilePath
runOutRedirF :: OutRedir a -> FilePath -> IOMode -> IO a
-- | Catches all output (much like VAR=$(...) in the shell)
newtype RecorderT m a
Recorder :: ([String] -> m (a, [String])) -> RecorderT m a
runRecorderT' :: RecorderT m a -> [String] -> m (a, [String])
-- | RecorderT on the Identity
type Recorder = RecorderT Identity
-- | The recorder state. Use this together with replay,
-- replayM or replay_.
newtype Replayable
Replayable :: [String] -> Replayable
-- | Replay a recorder state inside a Monad.
replayM :: Monad m => m Replayable -> m String
-- | Replay a recorder state in a pure context.
replay :: Replayable -> String
-- | Replay the current recorder state without leaving the recorder.
replay_ :: Monad m => RecorderT m String
-- | Run Recorder and also return its state.
runRecorder :: Recorder a -> (a, Replayable)
-- | Run RecorderT and also return its state.
runRecorderT :: (Functor m, Monad m) => RecorderT m a -> m (a, Replayable)
-- | Line-terminating alternative to mprint
mprintLn :: MonadPrinter m => String -> m ()
-- | Redirection target that discards input.
data DiscardO
DiscardO :: DiscardO
-- | Redirection target that records input.
data RecordO
RecordO :: RecordO
-- | Class for all redirection targets.
class RedirectionTarget t mt a r | t -> mt, t a -> r where .>>. = (.>.)
(.>.) :: (RedirectionTarget t mt a r, Functor m, MonadIO m, MonadPrinter (mt m)) => mt m a -> t -> m r
(.>>.) :: (RedirectionTarget t mt a r, Functor m, MonadIO m, MonadPrinter (mt m)) => mt m a -> t -> m r
instance RedirectionTarget FilePath OutRedirT a a
instance RedirectionTarget RecordO RecorderT a (a, Replayable)
instance RedirectionTarget DiscardO DeafT a a
instance Show Replayable
instance MonadIO m => MonadIO (RecorderT m)
instance Monad m => Functor (RecorderT m)
instance Monad m => MonadPrinter (RecorderT m)
instance MonadTrans RecorderT
instance Monad m => Monad (RecorderT m)
instance Monad m => Functor (OutRedirT m)
instance MonadIO m => MonadPrinter (OutRedirT m)
instance MonadIO m => MonadIO (OutRedirT m)
instance MonadTrans OutRedirT
instance Monad m => Monad (OutRedirT m)
instance Monad m => MonadPrinter (DeafT m)
instance MonadIO m => MonadIO (DeafT m)
instance Functor m => Functor (DeafT m)
instance MonadTrans DeafT
instance Monad m => Monad (DeafT m)
instance Monad m => MonadPrinter (StateT String m)
instance MonadPrinter IO
-- | Provides a typeclass for process spawning.
module System.Chatty.Spawn
-- | Class for all (real or pseudo) process-spawning monads.
class Monad m => MonadSpawn m
mspw :: MonadSpawn m => String -> [String] -> Either Handle String -> m (Int, String, [Handle])
mah :: MonadSpawn m => String -> m Bool
-- | Spawn process
spawn :: (MonadFinalizer m, MonadScanner m, MonadPrinter m, MonadSpawn m, Functor m) => String -> [String] -> m Int
instance MonadSpawn IO
-- | Provides a MonadSpawn overlay that may catch specific spawn calls and
-- handle them itself.
module System.Chatty.Spawn.Overlay
-- | MonadSpawn overlay. Carries a map of own command implementations that
-- are called instead of the actual ones.
newtype SpawnOverlayT m a
SpawnOverlay :: ([(String, [String] -> String -> m (Int, String))] -> m (a, [(String, [String] -> String -> m (Int, String))])) -> SpawnOverlayT m a
runSpawnOverlayT :: SpawnOverlayT m a -> [(String, [String] -> String -> m (Int, String))] -> m (a, [(String, [String] -> String -> m (Int, String))])
instance MonadSpawn m => MonadSpawn (SpawnOverlayT m)
instance Monad m => Functor (SpawnOverlayT m)
instance MonadIO m => MonadIO (SpawnOverlayT m)
instance MonadTrans SpawnOverlayT
instance Monad m => Monad (SpawnOverlayT m)
-- | Provides builtins for some common commands.
module System.Chatty.Spawn.Builtins
-- | Use builtins if possible.
withBuiltins :: (Functor m, MonadSpawn m) => SpawnOverlayT m a -> m a
-- | Provides a printer class that offers several channels.
module Text.Chatty.Channel.Printer
-- | Typeclass for all printers that offer several channels.
class (MonadPrinter m, Eq c) => ChannelPrinter c m where cbracket c m = cstart c >> m >>= \ a -> cfin c >> return a cprint c s = cbracket c $ mprint s
cbracket :: ChannelPrinter c m => c -> m a -> m a
cstart :: ChannelPrinter c m => c -> m ()
cfin :: ChannelPrinter c m => c -> m ()
cprint :: ChannelPrinter c m => c -> String -> m ()
cthis :: ChannelPrinter c m => m c
-- | Catches all output on multiple channels.
newtype ArchiverT c m a
Archiver :: (([(c, [String])], [c]) -> m (a, ([(c, [String])], [c]))) -> ArchiverT c m a
runArchiverT' :: ArchiverT c m a -> ([(c, [String])], [c]) -> m (a, ([(c, [String])], [c]))
type IntArchiverT = ArchiverT Int
type BoolArchiverT = ArchiverT Bool
type HandleArchiverT = ArchiverT Handle
runArchiverT :: (Eq c, Monad m) => c -> ArchiverT c m a -> m (a, [(c, Replayable)])
-- | Forwards output only on a specific channel.
newtype FilterT c m a
Filter :: ((c, [c]) -> m (a, [c])) -> FilterT c m a
runFilterT :: FilterT c m a -> (c, [c]) -> m (a, [c])
type IntFilterT = FilterT Int
type BoolFilterT = FilterT Bool
type HandleFilterT = FilterT Handle
-- | Joins all output regardless of its channel.
newtype JoinerT m a
Joiner :: m a -> JoinerT m a
runJoinerT :: JoinerT m a -> m a
instance (Eq c, MonadPrinter m) => ChannelPrinter c (JoinerT m)
instance MonadPrinter m => MonadPrinter (JoinerT m)
instance Functor m => Functor (JoinerT m)
instance MonadIO m => MonadIO (JoinerT m)
instance MonadTrans JoinerT
instance Monad m => Monad (JoinerT m)
instance (Eq c, MonadPrinter m) => ChannelPrinter c (FilterT c m)
instance (Eq c, MonadPrinter m) => MonadPrinter (FilterT c m)
instance Monad m => Functor (FilterT c m)
instance MonadIO m => MonadIO (FilterT c m)
instance MonadTrans (FilterT c)
instance Monad m => Monad (FilterT c m)
instance (Eq c, Monad m) => ChannelPrinter c (ArchiverT c m)
instance (Eq c, Monad m) => MonadPrinter (ArchiverT c m)
instance Monad m => Functor (ArchiverT c m)
instance MonadIO m => MonadIO (ArchiverT c m)
instance MonadTrans (ArchiverT c)
instance Monad m => Monad (ArchiverT c m)
-- | Provides a printer class that may broadcast to all channels that
-- fulfill a condition.
module Text.Chatty.Channel.Broadcast
-- | Typeclass for all channel printers that may broadcast to all channels
-- that fulfill a condition.
class ChannelPrinter c m => Broadcaster c m
bprint :: Broadcaster c m => (c -> m Bool) -> String -> m ()
-- | Typeclass for all broadcaster that may embrace sections
class Broadcaster c m => BroadcasterBracket c m where bbracket f m = bstart f >> m >>= \ a -> bfin f >> return a
bbracket :: BroadcasterBracket c m => (c -> m Bool) -> m a -> m a
bstart :: BroadcasterBracket c m => (c -> m Bool) -> m ()
bfin :: BroadcasterBracket c m => (c -> m Bool) -> m ()
-- | Provides an extended printer class that supports colours.
module Text.Chatty.Extended.Printer
-- | Typeclass for all printers that support colourized output.
class MonadPrinter m => ExtendedPrinter m where ebracket c m = do { estart c; a <- m; efin; return a } eprint c = ebracket c . mprint eprintLn c s = eprint c s >> mprintLn ""
ebracket :: ExtendedPrinter m => Colour -> m a -> m a
eprint :: ExtendedPrinter m => Colour -> String -> m ()
eprintLn :: ExtendedPrinter m => Colour -> String -> m ()
estart :: ExtendedPrinter m => Colour -> m ()
efin :: ExtendedPrinter m => m ()
-- | Colour tone.
data Tone
Green :: Tone
Red :: Tone
Yellow :: Tone
Blue :: Tone
Black :: Tone
White :: Tone
Cyan :: Tone
Magenta :: Tone
-- | Colour brightness
data Colour
Dull :: Tone -> Colour
Vivid :: Tone -> Colour
expandClr :: ExtendedPrinter m => String -> m ()
-- | Provides generic string expansion
module Text.Chatty.Expansion
-- | Typeclass for all string-expanding monads.
class Monad e => MonadExpand e
expand :: MonadExpand e => String -> e String
newtype NullExpanderT m a
NullExpander :: m a -> NullExpanderT m a
runNullExpanderT :: NullExpanderT m a -> m a
withExpansion :: Monad m => NullExpanderT m a -> m a
instance Monad m => MonadExpand (NullExpanderT m)
instance MonadIO m => MonadIO (NullExpanderT m)
instance Functor m => Functor (NullExpanderT m)
instance MonadTrans NullExpanderT
instance Monad m => Monad (NullExpanderT m)
module Text.Chatty.Expansion.Vars
-- | Some environment variable
data EnvVar
-- | Not set.
NotSet :: EnvVar
-- | An embeddable string.
Literal :: String -> EnvVar
-- | Something we can show.
Scalar :: a -> EnvVar
-- | Array of that
Array :: [EnvVar] -> EnvVar
-- | Environment storage and variable expander.
newtype ExpanderT m a
Expander :: ([(String, EnvVar)] -> m (a, [(String, EnvVar)])) -> ExpanderT m a
runExpanderT :: ExpanderT m a -> [(String, EnvVar)] -> m (a, [(String, EnvVar)])
-- | Run this function inside a blank environment.
localEnvironment :: Functor m => ExpanderT m a -> m a
-- | Run this function in a locally modifiable, but not exported
-- environment
forkEnvironment :: (Functor m, Monad m, MonadIO m) => ExpanderT m a -> m a
-- | Export this local environment.
exportAll :: (Monad m, MonadIO m) => ExpanderT m ()
-- | Expand $variables. TODO: ${var}
expandVars :: (Monad m, Functor m, ExpanderEnv m) => String -> m String
-- | Is alphanumeric?
isAnum :: Char -> Bool
-- | Typeclass for all environment storages.
class Monad ee => ExpanderEnv ee
mgetv :: ExpanderEnv ee => String -> ee EnvVar
mputv :: ExpanderEnv ee => String -> EnvVar -> ee ()
instance ExpanderEnv IO
instance Monad m => ExpanderEnv (ExpanderT m)
instance MonadExpand m => MonadExpand (ExpanderT m)
instance MonadExpand IO
instance Monad m => Functor (ExpanderT m)
instance MonadIO m => MonadIO (ExpanderT m)
instance MonadTrans ExpanderT
instance Monad m => Monad (ExpanderT m)
instance Show EnvVar
module Text.Chatty.Expansion.History
newtype HistoryT m a
History :: ([String] -> m (a, [String])) -> HistoryT m a
runHistoryT :: HistoryT m a -> [String] -> m (a, [String])
class Monad he => HistoryEnv he
mcounth :: HistoryEnv he => he Int
mgeth :: HistoryEnv he => Int -> he String
mputh :: HistoryEnv he => String -> he ()
expandHist :: HistoryEnv h => String -> h String
withHistory :: Monad m => HistoryT m a -> m a
instance MonadExpand m => MonadExpand (HistoryT m)
instance Monad m => HistoryEnv (HistoryT m)
instance Monad m => Functor (HistoryT m)
instance MonadIO m => MonadIO (HistoryT m)
instance MonadTrans HistoryT
instance Monad m => Monad (HistoryT m)
-- | Provides an ExtendedPrinter that handles colours using HTML
-- output.
module Text.Chatty.Extended.HTML
-- | An ExtendedPrinter for HTML output.
newtype HtmlPrinterT m a
HtmlPrinter :: m a -> HtmlPrinterT m a
runHtmlPrinterT :: HtmlPrinterT m a -> m a
-- | Convert the given character to its HTML representation.
maskHtml :: Char -> String
-- | Convert the given colour to its CSS representation.
hexColour :: Colour -> [Char]
instance (Functor m, MonadExpand m) => MonadExpand (HtmlPrinterT m)
instance MonadPrinter m => ExtendedPrinter (HtmlPrinterT m)
instance MonadPrinter m => MonadPrinter (HtmlPrinterT m)
instance MonadIO m => MonadIO (HtmlPrinterT m)
instance Functor m => Functor (HtmlPrinterT m)
instance MonadTrans HtmlPrinterT
instance Monad m => Monad (HtmlPrinterT m)
-- | Provides an ExtendedPrinter that handles colours using standardized
-- ANSI codes.
module Text.Chatty.Extended.ANSI
-- | An ExtendedPrinter that uses ANSI colour codes.
newtype AnsiPrinterT m a
AnsiPrinter :: ([Colour] -> m (a, [Colour])) -> AnsiPrinterT m a
runAnsiPrinterT :: AnsiPrinterT m a -> [Colour] -> m (a, [Colour])
-- | Convert Chatty's colour intensity to ansi-terminal's one
mkColourInt :: Colour -> ColorIntensity
-- | Convert Chatty's colour tone to ansi-terminal's one
mkColourCode :: Colour -> Color
instance (Functor m, MonadExpand m) => MonadExpand (AnsiPrinterT m)
instance MonadPrinter m => ExtendedPrinter (AnsiPrinterT m)
instance MonadPrinter m => MonadPrinter (AnsiPrinterT m)
instance MonadIO m => MonadIO (AnsiPrinterT m)
instance Monad m => Functor (AnsiPrinterT m)
instance MonadTrans AnsiPrinterT
instance Monad m => Monad (AnsiPrinterT m)
-- | Declares serveral templates for comfortable instance derivation
module Text.Chatty.Interactor.Templates
-- | Automatically derives a MonadScanner instance for you.
mkScanner :: Name -> Q [Dec]
-- | Automatically derives a MonadPrinter instance for you.
mkPrinter :: Name -> Q [Dec]
-- | Automatically derives a MonadFinalizer instance for you.
mkFinalizer :: Name -> Q [Dec]
-- | Automatically derives a MonadExpand instance for you.
mkExpander :: Name -> Q [Dec]
-- | Automatically derives an ExpanderEnv instance for you
mkExpanderEnv :: Name -> Q [Dec]
-- | Automatically derives a HistoryEnv instance for you
mkHistoryEnv :: Name -> Q [Dec]
-- | mkInteractor takes a type name and a list of typeclass derivers and
-- applies them all.
mkInteractor :: InteractorMaker i => Name -> i
-- | Automatically derives a MonadSpawn instance for you.
mkSpawn :: Name -> Q [Dec]
-- | Automatically derives a MonadRandom instance for you.
mkRandom :: Name -> Q [Dec]
-- | Automatically derives a MonadClock instance for you.
mkClock :: Name -> Q [Dec]
-- | Automatically derives all chatty typeclasses for you.
mkChatty :: Name -> Q [Dec]
-- | Automatically derives a ChannelPrinter instance for you.
mkChannelPrinter :: Name -> Name -> Q [Dec]
-- | Automatically derives ChannelPrinter instances for Int,
-- Bool and Handle channels.
mkDefCP :: Name -> Q [Dec]
-- | Automatically derives all chatty typeclasses that are sensible for an
-- ArchiverT.
mkArchiver :: Name -> Q [Dec]
-- | Automatically derives an ExtendedPrinter instance for you.
mkExtendedPrinter :: Name -> Q [Dec]
instance InteractorMaker i => InteractorMaker ((Name -> Q [Dec]) -> i)
instance InteractorMaker (Q [Dec])
-- | Provides a bunch of derived instances for the various typeclasses.
module Text.Chatty.Interactor
-- | IgnorantT ignores all output and does not provide any input.
type IgnorantT m = QuietT (DeafT m)
-- | Ignorant is IgnorantT on the identity
type Ignorant = IgnorantT Identity
-- | ChattyT simulates a console, actually taking input as a string and
-- recording output.
type ChattyT m = HereStringT (RecorderT m)
-- | Chatty is ChattyT on the identity
type Chatty = ChattyT Identity
-- | Run IgnorantT (does not take anything)
runIgnorantT :: Monad m => IgnorantT m a -> m a
-- | Run Ignorant (does not take anything)
runIgnorant :: Ignorant a -> a
-- | Run ChattyT. Takes input as a string and returns (result, remaining
-- input, output).
runChattyT :: (Monad m, Functor m) => ChattyT m a -> String -> m (a, String, Replayable)
-- | Run Chatty. Takes input as a string and returns (result, remaining
-- input, output).
runChatty :: Chatty a -> String -> (a, String, Replayable)
-- | Connect the output of some function to the input of another one.
-- Compare with a pipe (cmd1 | cmd2).
(.|.) :: (Monad m, Functor m) => RecorderT m a -> HereStringT m b -> m b
-- | Runs the second function and feeds its output as an argument to the
-- first one. Compare with process expansion ($(cmd)).
(.<$.) :: (Functor m, Monad m) => (String -> m b) -> RecorderT m a -> m b
instance MonadClock m0 => MonadClock (JoinerT m0)
instance MonadRandom m0 => MonadRandom (JoinerT m0)
instance MonadSpawn m0 => MonadSpawn (JoinerT m0)
instance MonadFinalizer m0 => MonadFinalizer (JoinerT m0)
instance HistoryEnv m0 => HistoryEnv (JoinerT m0)
instance ExpanderEnv m0 => ExpanderEnv (JoinerT m0)
instance MonadExpand m0 => MonadExpand (JoinerT m0)
instance MonadScanner m0 => MonadScanner (JoinerT m0)
instance MonadClock m0 => MonadClock (HandleFilterT m0)
instance MonadRandom m0 => MonadRandom (HandleFilterT m0)
instance MonadSpawn m0 => MonadSpawn (HandleFilterT m0)
instance MonadFinalizer m0 => MonadFinalizer (HandleFilterT m0)
instance HistoryEnv m0 => HistoryEnv (HandleFilterT m0)
instance ExpanderEnv m0 => ExpanderEnv (HandleFilterT m0)
instance MonadExpand m0 => MonadExpand (HandleFilterT m0)
instance MonadScanner m0 => MonadScanner (HandleFilterT m0)
instance MonadClock m0 => MonadClock (BoolFilterT m0)
instance MonadRandom m0 => MonadRandom (BoolFilterT m0)
instance MonadSpawn m0 => MonadSpawn (BoolFilterT m0)
instance MonadFinalizer m0 => MonadFinalizer (BoolFilterT m0)
instance HistoryEnv m0 => HistoryEnv (BoolFilterT m0)
instance ExpanderEnv m0 => ExpanderEnv (BoolFilterT m0)
instance MonadExpand m0 => MonadExpand (BoolFilterT m0)
instance MonadScanner m0 => MonadScanner (BoolFilterT m0)
instance MonadClock m0 => MonadClock (IntFilterT m0)
instance MonadRandom m0 => MonadRandom (IntFilterT m0)
instance MonadSpawn m0 => MonadSpawn (IntFilterT m0)
instance MonadFinalizer m0 => MonadFinalizer (IntFilterT m0)
instance HistoryEnv m0 => HistoryEnv (IntFilterT m0)
instance ExpanderEnv m0 => ExpanderEnv (IntFilterT m0)
instance MonadExpand m0 => MonadExpand (IntFilterT m0)
instance MonadScanner m0 => MonadScanner (IntFilterT m0)
instance MonadClock m0 => MonadClock (HandleArchiverT m0)
instance MonadRandom m0 => MonadRandom (HandleArchiverT m0)
instance MonadSpawn m0 => MonadSpawn (HandleArchiverT m0)
instance MonadFinalizer m0 => MonadFinalizer (HandleArchiverT m0)
instance HistoryEnv m0 => HistoryEnv (HandleArchiverT m0)
instance ExpanderEnv m0 => ExpanderEnv (HandleArchiverT m0)
instance MonadExpand m0 => MonadExpand (HandleArchiverT m0)
instance MonadScanner m0 => MonadScanner (HandleArchiverT m0)
instance MonadClock m0 => MonadClock (BoolArchiverT m0)
instance MonadRandom m0 => MonadRandom (BoolArchiverT m0)
instance MonadSpawn m0 => MonadSpawn (BoolArchiverT m0)
instance MonadFinalizer m0 => MonadFinalizer (BoolArchiverT m0)
instance HistoryEnv m0 => HistoryEnv (BoolArchiverT m0)
instance ExpanderEnv m0 => ExpanderEnv (BoolArchiverT m0)
instance MonadExpand m0 => MonadExpand (BoolArchiverT m0)
instance MonadScanner m0 => MonadScanner (BoolArchiverT m0)
instance MonadClock m0 => MonadClock (IntArchiverT m0)
instance MonadRandom m0 => MonadRandom (IntArchiverT m0)
instance MonadSpawn m0 => MonadSpawn (IntArchiverT m0)
instance MonadFinalizer m0 => MonadFinalizer (IntArchiverT m0)
instance HistoryEnv m0 => HistoryEnv (IntArchiverT m0)
instance ExpanderEnv m0 => ExpanderEnv (IntArchiverT m0)
instance MonadExpand m0 => MonadExpand (IntArchiverT m0)
instance MonadScanner m0 => MonadScanner (IntArchiverT m0)
instance ChannelPrinter Handle m0 => ChannelPrinter Handle (HistoryT m0)
instance ChannelPrinter Bool m0 => ChannelPrinter Bool (HistoryT m0)
instance ChannelPrinter Int m0 => ChannelPrinter Int (HistoryT m0)
instance ExpanderEnv m0 => ExpanderEnv (HistoryT m0)
instance MonadClock m0 => MonadClock (HistoryT m0)
instance MonadRandom m0 => MonadRandom (HistoryT m0)
instance MonadSpawn m0 => MonadSpawn (HistoryT m0)
instance MonadFinalizer m0 => MonadFinalizer (HistoryT m0)
instance ExtendedPrinter m0 => ExtendedPrinter (HistoryT m0)
instance MonadPrinter m0 => MonadPrinter (HistoryT m0)
instance MonadScanner m0 => MonadScanner (HistoryT m0)
instance ChannelPrinter Handle m0 => ChannelPrinter Handle (NullExpanderT m0)
instance ChannelPrinter Bool m0 => ChannelPrinter Bool (NullExpanderT m0)
instance ChannelPrinter Int m0 => ChannelPrinter Int (NullExpanderT m0)
instance MonadClock m0 => MonadClock (NullExpanderT m0)
instance MonadRandom m0 => MonadRandom (NullExpanderT m0)
instance MonadSpawn m0 => MonadSpawn (NullExpanderT m0)
instance MonadFinalizer m0 => MonadFinalizer (NullExpanderT m0)
instance ExtendedPrinter m0 => ExtendedPrinter (NullExpanderT m0)
instance MonadPrinter m0 => MonadPrinter (NullExpanderT m0)
instance MonadScanner m0 => MonadScanner (NullExpanderT m0)
instance ChannelPrinter Handle m0 => ChannelPrinter Handle (AnsiPrinterT m0)
instance ChannelPrinter Bool m0 => ChannelPrinter Bool (AnsiPrinterT m0)
instance ChannelPrinter Int m0 => ChannelPrinter Int (AnsiPrinterT m0)
instance MonadClock m0 => MonadClock (AnsiPrinterT m0)
instance MonadRandom m0 => MonadRandom (AnsiPrinterT m0)
instance MonadSpawn m0 => MonadSpawn (AnsiPrinterT m0)
instance MonadFinalizer m0 => MonadFinalizer (AnsiPrinterT m0)
instance HistoryEnv m0 => HistoryEnv (AnsiPrinterT m0)
instance ExpanderEnv m0 => ExpanderEnv (AnsiPrinterT m0)
instance MonadScanner m0 => MonadScanner (AnsiPrinterT m0)
instance ChannelPrinter Handle m0 => ChannelPrinter Handle (HtmlPrinterT m0)
instance ChannelPrinter Bool m0 => ChannelPrinter Bool (HtmlPrinterT m0)
instance ChannelPrinter Int m0 => ChannelPrinter Int (HtmlPrinterT m0)
instance MonadClock m0 => MonadClock (HtmlPrinterT m0)
instance MonadRandom m0 => MonadRandom (HtmlPrinterT m0)
instance MonadSpawn m0 => MonadSpawn (HtmlPrinterT m0)
instance MonadFinalizer m0 => MonadFinalizer (HtmlPrinterT m0)
instance HistoryEnv m0 => HistoryEnv (HtmlPrinterT m0)
instance ExpanderEnv m0 => ExpanderEnv (HtmlPrinterT m0)
instance MonadScanner m0 => MonadScanner (HtmlPrinterT m0)
instance ChannelPrinter Handle m0 => ChannelPrinter Handle (SpawnOverlayT m0)
instance ChannelPrinter Bool m0 => ChannelPrinter Bool (SpawnOverlayT m0)
instance ChannelPrinter Int m0 => ChannelPrinter Int (SpawnOverlayT m0)
instance MonadClock m0 => MonadClock (SpawnOverlayT m0)
instance MonadRandom m0 => MonadRandom (SpawnOverlayT m0)
instance MonadFinalizer m0 => MonadFinalizer (SpawnOverlayT m0)
instance HistoryEnv m0 => HistoryEnv (SpawnOverlayT m0)
instance ExpanderEnv m0 => ExpanderEnv (SpawnOverlayT m0)
instance MonadExpand m0 => MonadExpand (SpawnOverlayT m0)
instance MonadScanner m0 => MonadScanner (SpawnOverlayT m0)
instance ExtendedPrinter m0 => ExtendedPrinter (SpawnOverlayT m0)
instance MonadPrinter m0 => MonadPrinter (SpawnOverlayT m0)
instance ChannelPrinter Handle m0 => ChannelPrinter Handle (InRedirT m0)
instance ChannelPrinter Bool m0 => ChannelPrinter Bool (InRedirT m0)
instance ChannelPrinter Int m0 => ChannelPrinter Int (InRedirT m0)
instance MonadClock m0 => MonadClock (InRedirT m0)
instance MonadRandom m0 => MonadRandom (InRedirT m0)
instance MonadSpawn m0 => MonadSpawn (InRedirT m0)
instance HistoryEnv m0 => HistoryEnv (InRedirT m0)
instance ExpanderEnv m0 => ExpanderEnv (InRedirT m0)
instance MonadExpand m0 => MonadExpand (InRedirT m0)
instance ExtendedPrinter m0 => ExtendedPrinter (InRedirT m0)
instance MonadPrinter m0 => MonadPrinter (InRedirT m0)
instance ChannelPrinter Handle m0 => ChannelPrinter Handle (QuietT m0)
instance ChannelPrinter Bool m0 => ChannelPrinter Bool (QuietT m0)
instance ChannelPrinter Int m0 => ChannelPrinter Int (QuietT m0)
instance MonadClock m0 => MonadClock (QuietT m0)
instance MonadRandom m0 => MonadRandom (QuietT m0)
instance MonadSpawn m0 => MonadSpawn (QuietT m0)
instance HistoryEnv m0 => HistoryEnv (QuietT m0)
instance ExpanderEnv m0 => ExpanderEnv (QuietT m0)
instance MonadExpand m0 => MonadExpand (QuietT m0)
instance ExtendedPrinter m0 => ExtendedPrinter (QuietT m0)
instance MonadPrinter m0 => MonadPrinter (QuietT m0)
instance ChannelPrinter Handle m0 => ChannelPrinter Handle (HereStringT m0)
instance ChannelPrinter Bool m0 => ChannelPrinter Bool (HereStringT m0)
instance ChannelPrinter Int m0 => ChannelPrinter Int (HereStringT m0)
instance MonadClock m0 => MonadClock (HereStringT m0)
instance MonadRandom m0 => MonadRandom (HereStringT m0)
instance MonadSpawn m0 => MonadSpawn (HereStringT m0)
instance HistoryEnv m0 => HistoryEnv (HereStringT m0)
instance ExpanderEnv m0 => ExpanderEnv (HereStringT m0)
instance MonadExpand m0 => MonadExpand (HereStringT m0)
instance ExtendedPrinter m0 => ExtendedPrinter (HereStringT m0)
instance MonadPrinter m0 => MonadPrinter (HereStringT m0)
instance ChannelPrinter Handle m0 => ChannelPrinter Handle (ExpanderT m0)
instance ChannelPrinter Bool m0 => ChannelPrinter Bool (ExpanderT m0)
instance ChannelPrinter Int m0 => ChannelPrinter Int (ExpanderT m0)
instance HistoryEnv m0 => HistoryEnv (ExpanderT m0)
instance MonadClock m0 => MonadClock (ExpanderT m0)
instance MonadRandom m0 => MonadRandom (ExpanderT m0)
instance MonadSpawn m0 => MonadSpawn (ExpanderT m0)
instance MonadFinalizer m0 => MonadFinalizer (ExpanderT m0)
instance MonadPrinter m0 => MonadPrinter (ExpanderT m0)
instance MonadScanner m0 => MonadScanner (ExpanderT m0)
instance ChannelPrinter Handle m0 => ChannelPrinter Handle (HandleCloserT m0)
instance ChannelPrinter Bool m0 => ChannelPrinter Bool (HandleCloserT m0)
instance ChannelPrinter Int m0 => ChannelPrinter Int (HandleCloserT m0)
instance MonadClock m0 => MonadClock (HandleCloserT m0)
instance MonadRandom m0 => MonadRandom (HandleCloserT m0)
instance MonadSpawn m0 => MonadSpawn (HandleCloserT m0)
instance HistoryEnv m0 => HistoryEnv (HandleCloserT m0)
instance ExpanderEnv m0 => ExpanderEnv (HandleCloserT m0)
instance MonadExpand m0 => MonadExpand (HandleCloserT m0)
instance MonadPrinter m0 => MonadPrinter (HandleCloserT m0)
instance MonadScanner m0 => MonadScanner (HandleCloserT m0)
instance MonadClock m0 => MonadClock (OutRedirT m0)
instance MonadRandom m0 => MonadRandom (OutRedirT m0)
instance MonadSpawn m0 => MonadSpawn (OutRedirT m0)
instance HistoryEnv m0 => HistoryEnv (OutRedirT m0)
instance ExpanderEnv m0 => ExpanderEnv (OutRedirT m0)
instance MonadExpand m0 => MonadExpand (OutRedirT m0)
instance MonadFinalizer m0 => MonadFinalizer (OutRedirT m0)
instance MonadScanner m0 => MonadScanner (OutRedirT m0)
instance MonadClock m0 => MonadClock (DeafT m0)
instance MonadRandom m0 => MonadRandom (DeafT m0)
instance MonadSpawn m0 => MonadSpawn (DeafT m0)
instance HistoryEnv m0 => HistoryEnv (DeafT m0)
instance ExpanderEnv m0 => ExpanderEnv (DeafT m0)
instance MonadExpand m0 => MonadExpand (DeafT m0)
instance MonadFinalizer m0 => MonadFinalizer (DeafT m0)
instance MonadScanner m0 => MonadScanner (DeafT m0)
instance MonadClock m0 => MonadClock (RecorderT m0)
instance MonadRandom m0 => MonadRandom (RecorderT m0)
instance MonadSpawn m0 => MonadSpawn (RecorderT m0)
instance HistoryEnv m0 => HistoryEnv (RecorderT m0)
instance ExpanderEnv m0 => ExpanderEnv (RecorderT m0)
instance MonadExpand m0 => MonadExpand (RecorderT m0)
instance MonadFinalizer m0 => MonadFinalizer (RecorderT m0)
instance MonadScanner m0 => MonadScanner (RecorderT m0)
-- | Provides in-haskell implementations for some standard functions
module System.Chatty.Commands
-- | Like cat on the command line. Accepts a list of filenames.
-- Simple pass-through, if none are provided.
cat :: (MonadScanner m, MonadPrinter m, MonadIO m, Functor m, MonadFinalizer m) => [String] -> m ()
-- | Like cat, but reverses the line order.
tac :: (MonadFinalizer m, MonadScanner m, MonadPrinter m, MonadIO m, Functor m) => [String] -> m ()
-- | Pass-through, simultanously writing all input to a given file.
tee :: (MonadScanner m, MonadPrinter m, MonadIO m, Functor m) => String -> m ()
-- | Prints the given string, after expanding it.
echo :: (MonadPrinter m, MonadExpand m) => String => m ()
-- | Mode for wc.
data WcMode
CountChars :: WcMode
CountLines :: WcMode
CountWords :: WcMode
-- | Count characters, lines or words of the input.
wc :: (MonadScanner m, MonadPrinter m, MonadIO m, Functor m) => WcMode -> m ()
-- | Change to given directory.
cd :: MonadIO m => String -> m ()
-- | Print current working directory.
pwd :: (MonadIO m, MonadPrinter m) => m ()
-- | List directory contents of the given directories (current one, if
-- empty list).
ls :: (MonadIO m, MonadPrinter m) => [String] -> m ()
-- | Filters only the first n lines of the input.
head :: (MonadScanner m, MonadPrinter m, MonadIO m, Functor m) => Int -> m ()
-- | FIlters only the last n lines of the input.
tail :: (MonadScanner m, MonadPrinter m, MonadIO m, Functor m) => Int -> m ()