-- 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 ()