-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Some monad transformers and typeclasses for abstraction of global dependencies. -- @package chatty @version 0.6.2.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) => ChClock m where mgetstamp = fmap (flip diffUTCTime (UTCTime (fromGregorian 1970 1 1) (secondsToDiffTime 0))) mutctime mutctime :: ChClock m => m UTCTime mgetstamp :: ChClock m => m NominalDiffTime -- | Typeclass for all monads that may provide random numbers class Monad m => ChRandom m mrandom :: (ChRandom m, Random r) => m r mrandomR :: (ChRandom m, Random r) => (r, r) -> m r instance ChRandom IO instance ChClock 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 => ChFinalizer m where mqfhs = foldr ((>>) . mqfh) (return ()) mqfh :: ChFinalizer m => Handle -> m () mqfhs :: ChFinalizer m => [Handle] -> m () mfin :: ChFinalizer 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 => ChFinalizer (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 => ChScanner m where mscanh = return Nothing mscan1 :: ChScanner m => m Char mscanL :: ChScanner m => m String mscannable :: ChScanner m => m Bool mscanh :: ChScanner m => m (Maybe Handle) mready :: ChScanner 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, ChFinalizer 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 :: ChScanner m => m String -- | Scan a fixed number of chars mscanN :: ChScanner 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, ChFinalizer m, Functor m, MonadIO m, ChScanner (mt m)) => mt m a -> t -> m r -- | Class for all Here-Documents class RedirectionHeredoc t mt a r | t -> mt, t a -> r (.<<.) :: (RedirectionHeredoc t mt a r, Functor m, ChScanner (mt m)) => mt m a -> t -> m r instance RedirectionHeredoc String HereStringT a a instance RedirectionSource Handle InRedirT a a instance RedirectionSource FilePath InRedirT a a instance RedirectionSource EmptyI QuietT a a instance ChFinalizer m => ChFinalizer (InRedirT m) instance Monad m => Functor (InRedirT m) instance MonadIO m => ChScanner (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 => ChScanner (QuietT m) instance MonadTrans QuietT instance Monad m => Monad (QuietT m) instance ChFinalizer m => ChFinalizer (HereStringT m) instance MonadIO m => MonadIO (HereStringT m) instance Monad m => ChScanner (HereStringT m) instance Monad m => Functor (HereStringT m) instance MonadTrans HereStringT instance Monad m => Monad (HereStringT m) instance Monad m => ChScanner (StateT String m) instance ChScanner IO -- | Provides a typeclass for buffered scanners as well as a buffering -- monad transformer. module Text.Chatty.Scanner.Buffered -- | Typeclass for all buffered ChScanners. class ChScanner m => ChBufferedScanner m mpeek1 :: ChBufferedScanner m => m Char mprepend :: ChBufferedScanner m => String -> m () -- | Typeclass for all BufferedScanners with support for pushing -- and popping. class ChBufferedScanner m => ChStackBufferedScanner m mpush :: ChStackBufferedScanner m => m () mpop :: ChStackBufferedScanner m => m () -- | A buffering MonadScanner transformer that lets you use -- mpeek1 and mprepend everywhere. newtype ScannerBufferT m a ScannerBuffer :: ([String] -> m (a, [String])) -> ScannerBufferT m a runScannerBufferT :: ScannerBufferT m a -> [String] -> m (a, [String]) instance ChScanner m => ChStackBufferedScanner (ScannerBufferT m) instance ChScanner m => ChBufferedScanner (ScannerBufferT m) instance MonadIO m => MonadIO (ScannerBufferT m) instance ChScanner m => ChScanner (ScannerBufferT m) instance Monad m => Functor (ScannerBufferT m) instance MonadTrans ScannerBufferT instance Monad m => Monad (ScannerBufferT m) instance Monad m => ChBufferedScanner (HereStringT m) instance Monad m => ChBufferedScanner (StateT String m) -- | 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 => ChPrinter m where mnoecho = mprint mflush = return () mnomask = mprint mprint :: ChPrinter m => String -> m () mnoecho :: ChPrinter m => String -> m () mflush :: ChPrinter m => m () mnomask :: ChPrinter 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 :: ChPrinter m => String -> m () -- | Line-terminating alternative to mnomask mnomaskLn :: ChPrinter 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, ChPrinter (mt m)) => mt m a -> t -> m r (.>>.) :: (RedirectionTarget t mt a r, Functor m, MonadIO m, ChPrinter (mt m)) => mt m a -> t -> m r instance RedirectionTarget Handle OutRedirT a a 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 => ChPrinter (RecorderT m) instance MonadTrans RecorderT instance Monad m => Monad (RecorderT m) instance Monad m => Functor (OutRedirT m) instance MonadIO m => ChPrinter (OutRedirT m) instance MonadIO m => MonadIO (OutRedirT m) instance MonadTrans OutRedirT instance Monad m => Monad (OutRedirT m) instance Monad m => ChPrinter (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 => ChPrinter (StateT String m) instance ChPrinter IO -- | Provides a typeclass for process spawning. module System.Chatty.Spawn -- | Class for all (real or pseudo) process-spawning monads. class Monad m => ChSpawn m mspw :: ChSpawn m => String -> [String] -> Either Handle String -> m (Int, String, [Handle]) mah :: ChSpawn m => String -> m Bool -- | Spawn process spawn :: (ChFinalizer m, ChScanner m, ChPrinter m, ChSpawn m, Functor m) => String -> [String] -> m Int instance ChSpawn 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 ChSpawn m => ChSpawn (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, ChSpawn 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 (ChPrinter m, Eq c) => ChChannelPrinter c m where cbracket c m = cstart c >> m >>= \ a -> cfin c >> return a cprint c s = cbracket c $ mprint s cbracket :: ChChannelPrinter c m => c -> m a -> m a cstart :: ChChannelPrinter c m => c -> m () cfin :: ChChannelPrinter c m => c -> m () cprint :: ChChannelPrinter c m => c -> String -> m () cthis :: ChChannelPrinter 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, ChPrinter m) => ChChannelPrinter c (JoinerT m) instance ChPrinter m => ChPrinter (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, ChPrinter m) => ChChannelPrinter c (FilterT c m) instance (Eq c, ChPrinter m) => ChPrinter (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) => ChChannelPrinter c (ArchiverT c m) instance (Eq c, Monad m) => ChPrinter (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) module System.Chatty.Filesystem data FSExec a FSSucc :: a -> FSExec a NoPermission :: FSExec a NotFound :: FSExec a data File m File :: m (FSExec ()) -> m (FSExec ()) -> String -> String -> File m loadFun :: File m -> m (FSExec ()) saveFun :: File m -> m (FSExec ()) leftBehind :: File m -> String rightPending :: File m -> String newtype Path MultiPath :: [PathSpec] -> Path data PathSpec Path :: PathRoot -> [PathSeg] -> PathSpec data PathRoot Absolute :: PathRoot Relative :: PathRoot data PathSeg SelParent :: PathSeg SelChild :: String -> PathSeg type FileA m = Atom (File m) data Mountpoint m Mount :: [Mountpoint m] -> Atom a -> Path -> (Path -> (Atom a, Path) -> m (FSExec (FileA m))) -> Mountpoint m subMounts :: Mountpoint m -> [Mountpoint m] mstate :: Mountpoint m -> Atom a mpath :: Mountpoint m -> Path mopen :: Mountpoint m -> Path -> (Atom a, Path) -> m (FSExec (FileA m)) class Monad m => ChFilesystem m fopen :: ChFilesystem m => Path -> m (FSExec (FileA m)) fpwd :: ChFilesystem m => m Path fcd :: ChFilesystem m => Path -> m () class Monad m => CanLoad m n fload :: CanLoad m n => FileA n -> m (FSExec ()) class Monad m => CanSave m n fsave :: CanSave m n => FileA n -> m (FSExec ()) class Monad m => CanMount m n fmount :: CanMount m n => Mountpoint n -> m () data FilePrinterT m a FilePrinter :: (FileA m -> m a) -> FilePrinterT m a runFilePrinterT :: FilePrinterT m a -> FileA m -> m a data FileScannerT m a FileScanner :: (FileA m -> m a) -> FileScannerT m a runFileScannerT :: FileScannerT m a -> FileA m -> m a newtype NullFsT m a NullFs :: (Path -> [Mountpoint (NullFsT m)] -> m (a, Path, [Mountpoint (NullFsT m)])) -> NullFsT m a runNullFsT :: NullFsT m a -> Path -> [Mountpoint (NullFsT m)] -> m (a, Path, [Mountpoint (NullFsT m)]) absPath :: ChFilesystem m => Path -> m Path cmpPath' :: [PathSeg] -> [PathSeg] -> Maybe [PathSeg] cmpPath :: Path -> Path -> Path isPath :: Path -> Bool path :: String -> Path expandofs :: (ChAtoms m, ChFilesystem m) => m (Mountpoint m) printerfs :: (ChPrinter m, ChAtoms m, ChFilesystem m) => m (Mountpoint m) mount :: (CanMount m m, ChAtoms m, ChFilesystem m) => m (Mountpoint m) -> Path -> m () withNullFs :: ChAtoms m => NullFsT m a -> m a withExpandoFs :: (ChAtoms m, ChAtoms (NullFsT m)) => NullFsT m a -> m a instance Eq PathRoot instance Ord PathRoot instance Show PathRoot instance Eq PathSeg instance Ord PathSeg instance Show PathSeg instance Eq PathSpec instance Ord PathSpec instance Show PathSpec instance Eq Path instance Ord Path instance Show Path instance Monad m => CanMount (NullFsT m) (NullFsT m) instance Monad m => ChFilesystem (NullFsT m) instance MonadIO m => MonadIO (NullFsT m) instance MonadTrans NullFsT instance Functor f => Functor (NullFsT f) instance Monad m => Monad (NullFsT m) instance ChAtoms m => ChScanner (FileScannerT m) instance ChAtoms m => ChPrinter (FilePrinterT m) instance MonadIO m => MonadIO (FileScannerT m) instance MonadIO m => MonadIO (FilePrinterT m) instance MonadTrans FileScannerT instance MonadTrans FilePrinterT instance Functor f => Functor (FileScannerT f) instance Functor f => Functor (FilePrinterT f) instance Monad m => Monad (FileScannerT m) instance Monad m => Monad (FilePrinterT 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 ChChannelPrinter c m => ChBroadcaster c m bprint :: ChBroadcaster c m => (c -> m Bool) -> String -> m () -- | Typeclass for all broadcaster that may embrace sections class ChBroadcaster c m => ChBroadcasterBracket c m where bbracket f m = bstart f >> m >>= \ a -> bfin f >> return a bbracket :: ChBroadcasterBracket c m => (c -> m Bool) -> m a -> m a bstart :: ChBroadcasterBracket c m => (c -> m Bool) -> m () bfin :: ChBroadcasterBracket 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 ChPrinter m => ChExtendedPrinter 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 "" enomask c = ebracket c . mnomask enomaskLn c s = enomask c s >> mprintLn "" ebracket :: ChExtendedPrinter m => Colour -> m a -> m a eprint :: ChExtendedPrinter m => Colour -> String -> m () eprintLn :: ChExtendedPrinter m => Colour -> String -> m () enomask :: ChExtendedPrinter m => Colour -> String -> m () enomaskLn :: ChExtendedPrinter m => Colour -> String -> m () estart :: ChExtendedPrinter m => Colour -> m () efin :: ChExtendedPrinter 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 :: ChExtendedPrinter m => String -> m () -- | Provides generic string expansion module Text.Chatty.Expansion -- | Typeclass for all string-expanding monads. class Monad e => ChExpand e expand :: ChExpand 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 => ChExpand (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 expandVars :: (Monad m, Functor m, ChExpanderEnv m) => String -> m String -- | Is alphanumeric? isAnum :: Char -> Bool -- | Typeclass for all environment storages. class Monad ee => ChExpanderEnv ee mgetv :: ChExpanderEnv ee => String -> ee EnvVar mputv :: ChExpanderEnv ee => String -> EnvVar -> ee () instance ChExpanderEnv IO instance Monad m => ChExpanderEnv (ExpanderT m) instance ChExpand m => ChExpand (ExpanderT m) instance ChExpand 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 => ChHistoryEnv he mcounth :: ChHistoryEnv he => he Int mgeth :: ChHistoryEnv he => Int -> he String mputh :: ChHistoryEnv he => String -> he () expandHist :: ChHistoryEnv h => String -> h String withHistory :: Monad m => HistoryT m a -> m a instance ChExpand m => ChExpand (HistoryT m) instance Monad m => ChHistoryEnv (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 ChExtendedPrinter that handles colours using HTML -- output. module Text.Chatty.Extended.HTML -- | An ChExtendedPrinter 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, ChExpand m) => ChExpand (HtmlPrinterT m) instance ChPrinter m => ChExtendedPrinter (HtmlPrinterT m) instance ChPrinter m => ChPrinter (HtmlPrinterT m) instance MonadIO m => MonadIO (HtmlPrinterT m) instance Functor m => Functor (HtmlPrinterT m) instance MonadTrans HtmlPrinterT instance Monad m => Monad (HtmlPrinterT m) -- | Provides a ChExtendedPrinter that handles colours using -- standardized ANSI codes. module Text.Chatty.Extended.ANSI -- | A ChExtendedPrinter 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, ChExpand m) => ChExpand (AnsiPrinterT m) instance ChPrinter m => ChExtendedPrinter (AnsiPrinterT m) instance ChPrinter m => ChPrinter (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 ChScanner instance for you. mkScanner :: Name -> Q [Dec] -- | Automatically derives a ChPrinter instance for you. mkPrinter :: Name -> Q [Dec] -- | Automatically derives a ChFinalizer instance for you. mkFinalizer :: Name -> Q [Dec] -- | Automatically derives a ChExpand instance for you. mkExpander :: Name -> Q [Dec] -- | Automatically derives an ChExpanderEnv instance for you mkExpanderEnv :: Name -> Q [Dec] -- | Automatically derives a ChHistoryEnv 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 ChSpawn instance for you. mkSpawn :: Name -> Q [Dec] -- | Automatically derives a ChRandom instance for you. mkRandom :: Name -> Q [Dec] -- | Automatically derives a ChClock instance for you. mkClock :: Name -> Q [Dec] -- | Automatically derives all chatty typeclasses for you. mkChatty :: Name -> Q [Dec] -- | Automatically derives a ChChannelPrinter instance for you. mkChannelPrinter :: Name -> Name -> Q [Dec] -- | Automatically derives ChChannelPrinter 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 ChExtendedPrinter instance for you. mkExtendedPrinter :: Name -> Q [Dec] -- | Automatically derives a ChBufferedScanner instance for you. mkBufferedScanner :: Name -> Q [Dec] -- | Automatically derives a ChCounter instance for you. mkCounter :: Name -> Q [Dec] -- | Automatically derives a ChAtoms instance for you. mkAtoms :: Name -> Q [Dec] -- | Automatically derives instances for ChFilesystem, CanLoad, CanSave, -- CanMount. mkFilesys :: 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 CanMount m0 n0 => CanMount (JoinerT m0) n0 instance CanSave m0 n0 => CanSave (JoinerT m0) n0 instance CanLoad m0 n0 => CanLoad (JoinerT m0) n0 instance (ChAtoms (JoinerT m0), ChFilesystem m0) => ChFilesystem (JoinerT m0) instance ChAtoms m0 => ChAtoms (JoinerT m0) instance ChCounter m0 => ChCounter (JoinerT m0) instance ChClock m0 => ChClock (JoinerT m0) instance ChRandom m0 => ChRandom (JoinerT m0) instance ChSpawn m0 => ChSpawn (JoinerT m0) instance ChFinalizer m0 => ChFinalizer (JoinerT m0) instance ChHistoryEnv m0 => ChHistoryEnv (JoinerT m0) instance ChExpanderEnv m0 => ChExpanderEnv (JoinerT m0) instance ChExpand m0 => ChExpand (JoinerT m0) instance ChScanner m0 => ChScanner (JoinerT m0) instance CanMount m0 n0 => CanMount (HandleFilterT m0) n0 instance CanSave m0 n0 => CanSave (HandleFilterT m0) n0 instance CanLoad m0 n0 => CanLoad (HandleFilterT m0) n0 instance (ChAtoms (HandleFilterT m0), ChFilesystem m0) => ChFilesystem (HandleFilterT m0) instance ChAtoms m0 => ChAtoms (HandleFilterT m0) instance ChCounter m0 => ChCounter (HandleFilterT m0) instance ChClock m0 => ChClock (HandleFilterT m0) instance ChRandom m0 => ChRandom (HandleFilterT m0) instance ChSpawn m0 => ChSpawn (HandleFilterT m0) instance ChFinalizer m0 => ChFinalizer (HandleFilterT m0) instance ChHistoryEnv m0 => ChHistoryEnv (HandleFilterT m0) instance ChExpanderEnv m0 => ChExpanderEnv (HandleFilterT m0) instance ChExpand m0 => ChExpand (HandleFilterT m0) instance ChScanner m0 => ChScanner (HandleFilterT m0) instance CanMount m0 n0 => CanMount (BoolFilterT m0) n0 instance CanSave m0 n0 => CanSave (BoolFilterT m0) n0 instance CanLoad m0 n0 => CanLoad (BoolFilterT m0) n0 instance (ChAtoms (BoolFilterT m0), ChFilesystem m0) => ChFilesystem (BoolFilterT m0) instance ChAtoms m0 => ChAtoms (BoolFilterT m0) instance ChCounter m0 => ChCounter (BoolFilterT m0) instance ChClock m0 => ChClock (BoolFilterT m0) instance ChRandom m0 => ChRandom (BoolFilterT m0) instance ChSpawn m0 => ChSpawn (BoolFilterT m0) instance ChFinalizer m0 => ChFinalizer (BoolFilterT m0) instance ChHistoryEnv m0 => ChHistoryEnv (BoolFilterT m0) instance ChExpanderEnv m0 => ChExpanderEnv (BoolFilterT m0) instance ChExpand m0 => ChExpand (BoolFilterT m0) instance ChScanner m0 => ChScanner (BoolFilterT m0) instance CanMount m0 n0 => CanMount (IntFilterT m0) n0 instance CanSave m0 n0 => CanSave (IntFilterT m0) n0 instance CanLoad m0 n0 => CanLoad (IntFilterT m0) n0 instance (ChAtoms (IntFilterT m0), ChFilesystem m0) => ChFilesystem (IntFilterT m0) instance ChAtoms m0 => ChAtoms (IntFilterT m0) instance ChCounter m0 => ChCounter (IntFilterT m0) instance ChClock m0 => ChClock (IntFilterT m0) instance ChRandom m0 => ChRandom (IntFilterT m0) instance ChSpawn m0 => ChSpawn (IntFilterT m0) instance ChFinalizer m0 => ChFinalizer (IntFilterT m0) instance ChHistoryEnv m0 => ChHistoryEnv (IntFilterT m0) instance ChExpanderEnv m0 => ChExpanderEnv (IntFilterT m0) instance ChExpand m0 => ChExpand (IntFilterT m0) instance ChScanner m0 => ChScanner (IntFilterT m0) instance CanMount m0 n0 => CanMount (HandleArchiverT m0) n0 instance CanSave m0 n0 => CanSave (HandleArchiverT m0) n0 instance CanLoad m0 n0 => CanLoad (HandleArchiverT m0) n0 instance (ChAtoms (HandleArchiverT m0), ChFilesystem m0) => ChFilesystem (HandleArchiverT m0) instance ChAtoms m0 => ChAtoms (HandleArchiverT m0) instance ChCounter m0 => ChCounter (HandleArchiverT m0) instance ChClock m0 => ChClock (HandleArchiverT m0) instance ChRandom m0 => ChRandom (HandleArchiverT m0) instance ChSpawn m0 => ChSpawn (HandleArchiverT m0) instance ChFinalizer m0 => ChFinalizer (HandleArchiverT m0) instance ChHistoryEnv m0 => ChHistoryEnv (HandleArchiverT m0) instance ChExpanderEnv m0 => ChExpanderEnv (HandleArchiverT m0) instance ChExpand m0 => ChExpand (HandleArchiverT m0) instance ChScanner m0 => ChScanner (HandleArchiverT m0) instance CanMount m0 n0 => CanMount (BoolArchiverT m0) n0 instance CanSave m0 n0 => CanSave (BoolArchiverT m0) n0 instance CanLoad m0 n0 => CanLoad (BoolArchiverT m0) n0 instance (ChAtoms (BoolArchiverT m0), ChFilesystem m0) => ChFilesystem (BoolArchiverT m0) instance ChAtoms m0 => ChAtoms (BoolArchiverT m0) instance ChCounter m0 => ChCounter (BoolArchiverT m0) instance ChClock m0 => ChClock (BoolArchiverT m0) instance ChRandom m0 => ChRandom (BoolArchiverT m0) instance ChSpawn m0 => ChSpawn (BoolArchiverT m0) instance ChFinalizer m0 => ChFinalizer (BoolArchiverT m0) instance ChHistoryEnv m0 => ChHistoryEnv (BoolArchiverT m0) instance ChExpanderEnv m0 => ChExpanderEnv (BoolArchiverT m0) instance ChExpand m0 => ChExpand (BoolArchiverT m0) instance ChScanner m0 => ChScanner (BoolArchiverT m0) instance CanMount m0 n0 => CanMount (IntArchiverT m0) n0 instance CanSave m0 n0 => CanSave (IntArchiverT m0) n0 instance CanLoad m0 n0 => CanLoad (IntArchiverT m0) n0 instance (ChAtoms (IntArchiverT m0), ChFilesystem m0) => ChFilesystem (IntArchiverT m0) instance ChAtoms m0 => ChAtoms (IntArchiverT m0) instance ChCounter m0 => ChCounter (IntArchiverT m0) instance ChClock m0 => ChClock (IntArchiverT m0) instance ChRandom m0 => ChRandom (IntArchiverT m0) instance ChSpawn m0 => ChSpawn (IntArchiverT m0) instance ChFinalizer m0 => ChFinalizer (IntArchiverT m0) instance ChHistoryEnv m0 => ChHistoryEnv (IntArchiverT m0) instance ChExpanderEnv m0 => ChExpanderEnv (IntArchiverT m0) instance ChExpand m0 => ChExpand (IntArchiverT m0) instance ChScanner m0 => ChScanner (IntArchiverT m0) instance ChExtendedPrinter m0 => ChExtendedPrinter (AtomStoreT m0) instance ChChannelPrinter Handle m0 => ChChannelPrinter Handle (AtomStoreT m0) instance ChChannelPrinter Bool m0 => ChChannelPrinter Bool (AtomStoreT m0) instance ChChannelPrinter Int m0 => ChChannelPrinter Int (AtomStoreT m0) instance ChClock m0 => ChClock (AtomStoreT m0) instance ChRandom m0 => ChRandom (AtomStoreT m0) instance ChSpawn m0 => ChSpawn (AtomStoreT m0) instance ChHistoryEnv m0 => ChHistoryEnv (AtomStoreT m0) instance ChExpanderEnv m0 => ChExpanderEnv (AtomStoreT m0) instance ChExpand m0 => ChExpand (AtomStoreT m0) instance ChFinalizer m0 => ChFinalizer (AtomStoreT m0) instance ChBufferedScanner m0 => ChBufferedScanner (AtomStoreT m0) instance ChPrinter m0 => ChPrinter (AtomStoreT m0) instance ChScanner m0 => ChScanner (AtomStoreT m0) instance ChExtendedPrinter m0 => ChExtendedPrinter (CounterT m0) instance ChChannelPrinter Handle m0 => ChChannelPrinter Handle (CounterT m0) instance ChChannelPrinter Bool m0 => ChChannelPrinter Bool (CounterT m0) instance ChChannelPrinter Int m0 => ChChannelPrinter Int (CounterT m0) instance ChClock m0 => ChClock (CounterT m0) instance ChRandom m0 => ChRandom (CounterT m0) instance ChSpawn m0 => ChSpawn (CounterT m0) instance ChHistoryEnv m0 => ChHistoryEnv (CounterT m0) instance ChExpanderEnv m0 => ChExpanderEnv (CounterT m0) instance ChExpand m0 => ChExpand (CounterT m0) instance ChFinalizer m0 => ChFinalizer (CounterT m0) instance ChBufferedScanner m0 => ChBufferedScanner (CounterT m0) instance ChPrinter m0 => ChPrinter (CounterT m0) instance ChScanner m0 => ChScanner (CounterT m0) instance ChExtendedPrinter m0 => ChExtendedPrinter (NullFsT m0) instance ChChannelPrinter Handle m0 => ChChannelPrinter Handle (NullFsT m0) instance ChChannelPrinter Bool m0 => ChChannelPrinter Bool (NullFsT m0) instance ChChannelPrinter Int m0 => ChChannelPrinter Int (NullFsT m0) instance ChAtoms m0 => ChAtoms (NullFsT m0) instance ChCounter m0 => ChCounter (NullFsT m0) instance ChClock m0 => ChClock (NullFsT m0) instance ChRandom m0 => ChRandom (NullFsT m0) instance ChSpawn m0 => ChSpawn (NullFsT m0) instance ChHistoryEnv m0 => ChHistoryEnv (NullFsT m0) instance ChExpanderEnv m0 => ChExpanderEnv (NullFsT m0) instance ChExpand m0 => ChExpand (NullFsT m0) instance ChFinalizer m0 => ChFinalizer (NullFsT m0) instance ChBufferedScanner m0 => ChBufferedScanner (NullFsT m0) instance ChPrinter m0 => ChPrinter (NullFsT m0) instance ChScanner m0 => ChScanner (NullFsT m0) instance CanMount m0 n0 => CanMount (ScannerBufferT m0) n0 instance CanSave m0 n0 => CanSave (ScannerBufferT m0) n0 instance CanLoad m0 n0 => CanLoad (ScannerBufferT m0) n0 instance (ChAtoms (ScannerBufferT m0), ChFilesystem m0) => ChFilesystem (ScannerBufferT m0) instance ChAtoms m0 => ChAtoms (ScannerBufferT m0) instance ChCounter m0 => ChCounter (ScannerBufferT m0) instance ChSpawn m0 => ChSpawn (ScannerBufferT m0) instance ChChannelPrinter Handle m0 => ChChannelPrinter Handle (ScannerBufferT m0) instance ChChannelPrinter Bool m0 => ChChannelPrinter Bool (ScannerBufferT m0) instance ChChannelPrinter Int m0 => ChChannelPrinter Int (ScannerBufferT m0) instance ChClock m0 => ChClock (ScannerBufferT m0) instance ChRandom m0 => ChRandom (ScannerBufferT m0) instance ChFinalizer m0 => ChFinalizer (ScannerBufferT m0) instance ChHistoryEnv m0 => ChHistoryEnv (ScannerBufferT m0) instance ChExpanderEnv m0 => ChExpanderEnv (ScannerBufferT m0) instance ChExpand m0 => ChExpand (ScannerBufferT m0) instance ChExtendedPrinter m0 => ChExtendedPrinter (ScannerBufferT m0) instance ChPrinter m0 => ChPrinter (ScannerBufferT m0) instance CanMount m0 n0 => CanMount (HistoryT m0) n0 instance CanSave m0 n0 => CanSave (HistoryT m0) n0 instance CanLoad m0 n0 => CanLoad (HistoryT m0) n0 instance (ChAtoms (HistoryT m0), ChFilesystem m0) => ChFilesystem (HistoryT m0) instance ChAtoms m0 => ChAtoms (HistoryT m0) instance ChCounter m0 => ChCounter (HistoryT m0) instance ChChannelPrinter Handle m0 => ChChannelPrinter Handle (HistoryT m0) instance ChChannelPrinter Bool m0 => ChChannelPrinter Bool (HistoryT m0) instance ChChannelPrinter Int m0 => ChChannelPrinter Int (HistoryT m0) instance ChExpanderEnv m0 => ChExpanderEnv (HistoryT m0) instance ChClock m0 => ChClock (HistoryT m0) instance ChRandom m0 => ChRandom (HistoryT m0) instance ChSpawn m0 => ChSpawn (HistoryT m0) instance ChFinalizer m0 => ChFinalizer (HistoryT m0) instance ChExtendedPrinter m0 => ChExtendedPrinter (HistoryT m0) instance ChPrinter m0 => ChPrinter (HistoryT m0) instance ChBufferedScanner m0 => ChBufferedScanner (HistoryT m0) instance ChScanner m0 => ChScanner (HistoryT m0) instance CanMount m0 n0 => CanMount (NullExpanderT m0) n0 instance CanSave m0 n0 => CanSave (NullExpanderT m0) n0 instance CanLoad m0 n0 => CanLoad (NullExpanderT m0) n0 instance (ChAtoms (NullExpanderT m0), ChFilesystem m0) => ChFilesystem (NullExpanderT m0) instance ChAtoms m0 => ChAtoms (NullExpanderT m0) instance ChCounter m0 => ChCounter (NullExpanderT m0) instance ChChannelPrinter Handle m0 => ChChannelPrinter Handle (NullExpanderT m0) instance ChChannelPrinter Bool m0 => ChChannelPrinter Bool (NullExpanderT m0) instance ChChannelPrinter Int m0 => ChChannelPrinter Int (NullExpanderT m0) instance ChClock m0 => ChClock (NullExpanderT m0) instance ChRandom m0 => ChRandom (NullExpanderT m0) instance ChSpawn m0 => ChSpawn (NullExpanderT m0) instance ChFinalizer m0 => ChFinalizer (NullExpanderT m0) instance ChExtendedPrinter m0 => ChExtendedPrinter (NullExpanderT m0) instance ChPrinter m0 => ChPrinter (NullExpanderT m0) instance ChBufferedScanner m0 => ChBufferedScanner (NullExpanderT m0) instance ChScanner m0 => ChScanner (NullExpanderT m0) instance CanMount m0 n0 => CanMount (AnsiPrinterT m0) n0 instance CanSave m0 n0 => CanSave (AnsiPrinterT m0) n0 instance CanLoad m0 n0 => CanLoad (AnsiPrinterT m0) n0 instance (ChAtoms (AnsiPrinterT m0), ChFilesystem m0) => ChFilesystem (AnsiPrinterT m0) instance ChAtoms m0 => ChAtoms (AnsiPrinterT m0) instance ChCounter m0 => ChCounter (AnsiPrinterT m0) instance ChChannelPrinter Handle m0 => ChChannelPrinter Handle (AnsiPrinterT m0) instance ChChannelPrinter Bool m0 => ChChannelPrinter Bool (AnsiPrinterT m0) instance ChChannelPrinter Int m0 => ChChannelPrinter Int (AnsiPrinterT m0) instance ChClock m0 => ChClock (AnsiPrinterT m0) instance ChRandom m0 => ChRandom (AnsiPrinterT m0) instance ChSpawn m0 => ChSpawn (AnsiPrinterT m0) instance ChFinalizer m0 => ChFinalizer (AnsiPrinterT m0) instance ChHistoryEnv m0 => ChHistoryEnv (AnsiPrinterT m0) instance ChExpanderEnv m0 => ChExpanderEnv (AnsiPrinterT m0) instance ChBufferedScanner m0 => ChBufferedScanner (AnsiPrinterT m0) instance ChScanner m0 => ChScanner (AnsiPrinterT m0) instance CanMount m0 n0 => CanMount (HtmlPrinterT m0) n0 instance CanSave m0 n0 => CanSave (HtmlPrinterT m0) n0 instance CanLoad m0 n0 => CanLoad (HtmlPrinterT m0) n0 instance (ChAtoms (HtmlPrinterT m0), ChFilesystem m0) => ChFilesystem (HtmlPrinterT m0) instance ChAtoms m0 => ChAtoms (HtmlPrinterT m0) instance ChCounter m0 => ChCounter (HtmlPrinterT m0) instance ChChannelPrinter Handle m0 => ChChannelPrinter Handle (HtmlPrinterT m0) instance ChChannelPrinter Bool m0 => ChChannelPrinter Bool (HtmlPrinterT m0) instance ChChannelPrinter Int m0 => ChChannelPrinter Int (HtmlPrinterT m0) instance ChClock m0 => ChClock (HtmlPrinterT m0) instance ChRandom m0 => ChRandom (HtmlPrinterT m0) instance ChSpawn m0 => ChSpawn (HtmlPrinterT m0) instance ChFinalizer m0 => ChFinalizer (HtmlPrinterT m0) instance ChHistoryEnv m0 => ChHistoryEnv (HtmlPrinterT m0) instance ChExpanderEnv m0 => ChExpanderEnv (HtmlPrinterT m0) instance ChBufferedScanner m0 => ChBufferedScanner (HtmlPrinterT m0) instance ChScanner m0 => ChScanner (HtmlPrinterT m0) instance CanMount m0 n0 => CanMount (SpawnOverlayT m0) n0 instance CanSave m0 n0 => CanSave (SpawnOverlayT m0) n0 instance CanLoad m0 n0 => CanLoad (SpawnOverlayT m0) n0 instance (ChAtoms (SpawnOverlayT m0), ChFilesystem m0) => ChFilesystem (SpawnOverlayT m0) instance ChAtoms m0 => ChAtoms (SpawnOverlayT m0) instance ChCounter m0 => ChCounter (SpawnOverlayT m0) instance ChChannelPrinter Handle m0 => ChChannelPrinter Handle (SpawnOverlayT m0) instance ChChannelPrinter Bool m0 => ChChannelPrinter Bool (SpawnOverlayT m0) instance ChChannelPrinter Int m0 => ChChannelPrinter Int (SpawnOverlayT m0) instance ChClock m0 => ChClock (SpawnOverlayT m0) instance ChRandom m0 => ChRandom (SpawnOverlayT m0) instance ChFinalizer m0 => ChFinalizer (SpawnOverlayT m0) instance ChHistoryEnv m0 => ChHistoryEnv (SpawnOverlayT m0) instance ChExpanderEnv m0 => ChExpanderEnv (SpawnOverlayT m0) instance ChExpand m0 => ChExpand (SpawnOverlayT m0) instance ChBufferedScanner m0 => ChBufferedScanner (SpawnOverlayT m0) instance ChScanner m0 => ChScanner (SpawnOverlayT m0) instance ChExtendedPrinter m0 => ChExtendedPrinter (SpawnOverlayT m0) instance ChPrinter m0 => ChPrinter (SpawnOverlayT m0) instance CanMount m0 n0 => CanMount (InRedirT m0) n0 instance CanSave m0 n0 => CanSave (InRedirT m0) n0 instance CanLoad m0 n0 => CanLoad (InRedirT m0) n0 instance (ChAtoms (InRedirT m0), ChFilesystem m0) => ChFilesystem (InRedirT m0) instance ChAtoms m0 => ChAtoms (InRedirT m0) instance ChCounter m0 => ChCounter (InRedirT m0) instance ChChannelPrinter Handle m0 => ChChannelPrinter Handle (InRedirT m0) instance ChChannelPrinter Bool m0 => ChChannelPrinter Bool (InRedirT m0) instance ChChannelPrinter Int m0 => ChChannelPrinter Int (InRedirT m0) instance ChClock m0 => ChClock (InRedirT m0) instance ChRandom m0 => ChRandom (InRedirT m0) instance ChSpawn m0 => ChSpawn (InRedirT m0) instance ChHistoryEnv m0 => ChHistoryEnv (InRedirT m0) instance ChExpanderEnv m0 => ChExpanderEnv (InRedirT m0) instance ChExpand m0 => ChExpand (InRedirT m0) instance ChExtendedPrinter m0 => ChExtendedPrinter (InRedirT m0) instance ChPrinter m0 => ChPrinter (InRedirT m0) instance CanMount m0 n0 => CanMount (QuietT m0) n0 instance CanSave m0 n0 => CanSave (QuietT m0) n0 instance CanLoad m0 n0 => CanLoad (QuietT m0) n0 instance (ChAtoms (QuietT m0), ChFilesystem m0) => ChFilesystem (QuietT m0) instance ChAtoms m0 => ChAtoms (QuietT m0) instance ChCounter m0 => ChCounter (QuietT m0) instance ChChannelPrinter Handle m0 => ChChannelPrinter Handle (QuietT m0) instance ChChannelPrinter Bool m0 => ChChannelPrinter Bool (QuietT m0) instance ChChannelPrinter Int m0 => ChChannelPrinter Int (QuietT m0) instance ChClock m0 => ChClock (QuietT m0) instance ChRandom m0 => ChRandom (QuietT m0) instance ChSpawn m0 => ChSpawn (QuietT m0) instance ChHistoryEnv m0 => ChHistoryEnv (QuietT m0) instance ChExpanderEnv m0 => ChExpanderEnv (QuietT m0) instance ChExpand m0 => ChExpand (QuietT m0) instance ChExtendedPrinter m0 => ChExtendedPrinter (QuietT m0) instance ChPrinter m0 => ChPrinter (QuietT m0) instance CanMount m0 n0 => CanMount (HereStringT m0) n0 instance CanSave m0 n0 => CanSave (HereStringT m0) n0 instance CanLoad m0 n0 => CanLoad (HereStringT m0) n0 instance (ChAtoms (HereStringT m0), ChFilesystem m0) => ChFilesystem (HereStringT m0) instance ChAtoms m0 => ChAtoms (HereStringT m0) instance ChCounter m0 => ChCounter (HereStringT m0) instance ChChannelPrinter Handle m0 => ChChannelPrinter Handle (HereStringT m0) instance ChChannelPrinter Bool m0 => ChChannelPrinter Bool (HereStringT m0) instance ChChannelPrinter Int m0 => ChChannelPrinter Int (HereStringT m0) instance ChClock m0 => ChClock (HereStringT m0) instance ChRandom m0 => ChRandom (HereStringT m0) instance ChSpawn m0 => ChSpawn (HereStringT m0) instance ChHistoryEnv m0 => ChHistoryEnv (HereStringT m0) instance ChExpanderEnv m0 => ChExpanderEnv (HereStringT m0) instance ChExpand m0 => ChExpand (HereStringT m0) instance ChExtendedPrinter m0 => ChExtendedPrinter (HereStringT m0) instance ChPrinter m0 => ChPrinter (HereStringT m0) instance CanMount m0 n0 => CanMount (ExpanderT m0) n0 instance CanSave m0 n0 => CanSave (ExpanderT m0) n0 instance CanLoad m0 n0 => CanLoad (ExpanderT m0) n0 instance (ChAtoms (ExpanderT m0), ChFilesystem m0) => ChFilesystem (ExpanderT m0) instance ChAtoms m0 => ChAtoms (ExpanderT m0) instance ChCounter m0 => ChCounter (ExpanderT m0) instance ChChannelPrinter Handle m0 => ChChannelPrinter Handle (ExpanderT m0) instance ChChannelPrinter Bool m0 => ChChannelPrinter Bool (ExpanderT m0) instance ChChannelPrinter Int m0 => ChChannelPrinter Int (ExpanderT m0) instance ChHistoryEnv m0 => ChHistoryEnv (ExpanderT m0) instance ChClock m0 => ChClock (ExpanderT m0) instance ChRandom m0 => ChRandom (ExpanderT m0) instance ChSpawn m0 => ChSpawn (ExpanderT m0) instance ChFinalizer m0 => ChFinalizer (ExpanderT m0) instance ChPrinter m0 => ChPrinter (ExpanderT m0) instance ChBufferedScanner m0 => ChBufferedScanner (ExpanderT m0) instance ChScanner m0 => ChScanner (ExpanderT m0) instance CanMount m0 n0 => CanMount (HandleCloserT m0) n0 instance CanSave m0 n0 => CanSave (HandleCloserT m0) n0 instance CanLoad m0 n0 => CanLoad (HandleCloserT m0) n0 instance (ChAtoms (HandleCloserT m0), ChFilesystem m0) => ChFilesystem (HandleCloserT m0) instance ChAtoms m0 => ChAtoms (HandleCloserT m0) instance ChCounter m0 => ChCounter (HandleCloserT m0) instance ChChannelPrinter Handle m0 => ChChannelPrinter Handle (HandleCloserT m0) instance ChChannelPrinter Bool m0 => ChChannelPrinter Bool (HandleCloserT m0) instance ChChannelPrinter Int m0 => ChChannelPrinter Int (HandleCloserT m0) instance ChClock m0 => ChClock (HandleCloserT m0) instance ChRandom m0 => ChRandom (HandleCloserT m0) instance ChSpawn m0 => ChSpawn (HandleCloserT m0) instance ChHistoryEnv m0 => ChHistoryEnv (HandleCloserT m0) instance ChExpanderEnv m0 => ChExpanderEnv (HandleCloserT m0) instance ChExpand m0 => ChExpand (HandleCloserT m0) instance ChPrinter m0 => ChPrinter (HandleCloserT m0) instance ChBufferedScanner m0 => ChBufferedScanner (HandleCloserT m0) instance ChScanner m0 => ChScanner (HandleCloserT m0) instance CanMount m0 n0 => CanMount (OutRedirT m0) n0 instance CanSave m0 n0 => CanSave (OutRedirT m0) n0 instance CanLoad m0 n0 => CanLoad (OutRedirT m0) n0 instance (ChAtoms (OutRedirT m0), ChFilesystem m0) => ChFilesystem (OutRedirT m0) instance ChAtoms m0 => ChAtoms (OutRedirT m0) instance ChCounter m0 => ChCounter (OutRedirT m0) instance ChClock m0 => ChClock (OutRedirT m0) instance ChRandom m0 => ChRandom (OutRedirT m0) instance ChSpawn m0 => ChSpawn (OutRedirT m0) instance ChHistoryEnv m0 => ChHistoryEnv (OutRedirT m0) instance ChExpanderEnv m0 => ChExpanderEnv (OutRedirT m0) instance ChExpand m0 => ChExpand (OutRedirT m0) instance ChFinalizer m0 => ChFinalizer (OutRedirT m0) instance ChBufferedScanner m0 => ChBufferedScanner (OutRedirT m0) instance ChScanner m0 => ChScanner (OutRedirT m0) instance CanMount m0 n0 => CanMount (DeafT m0) n0 instance CanSave m0 n0 => CanSave (DeafT m0) n0 instance CanLoad m0 n0 => CanLoad (DeafT m0) n0 instance (ChAtoms (DeafT m0), ChFilesystem m0) => ChFilesystem (DeafT m0) instance ChAtoms m0 => ChAtoms (DeafT m0) instance ChCounter m0 => ChCounter (DeafT m0) instance ChClock m0 => ChClock (DeafT m0) instance ChRandom m0 => ChRandom (DeafT m0) instance ChSpawn m0 => ChSpawn (DeafT m0) instance ChHistoryEnv m0 => ChHistoryEnv (DeafT m0) instance ChExpanderEnv m0 => ChExpanderEnv (DeafT m0) instance ChExpand m0 => ChExpand (DeafT m0) instance ChFinalizer m0 => ChFinalizer (DeafT m0) instance ChBufferedScanner m0 => ChBufferedScanner (DeafT m0) instance ChScanner m0 => ChScanner (DeafT m0) instance CanMount m0 n0 => CanMount (RecorderT m0) n0 instance CanSave m0 n0 => CanSave (RecorderT m0) n0 instance CanLoad m0 n0 => CanLoad (RecorderT m0) n0 instance (ChAtoms (RecorderT m0), ChFilesystem m0) => ChFilesystem (RecorderT m0) instance ChAtoms m0 => ChAtoms (RecorderT m0) instance ChCounter m0 => ChCounter (RecorderT m0) instance ChClock m0 => ChClock (RecorderT m0) instance ChRandom m0 => ChRandom (RecorderT m0) instance ChSpawn m0 => ChSpawn (RecorderT m0) instance ChHistoryEnv m0 => ChHistoryEnv (RecorderT m0) instance ChExpanderEnv m0 => ChExpanderEnv (RecorderT m0) instance ChExpand m0 => ChExpand (RecorderT m0) instance ChFinalizer m0 => ChFinalizer (RecorderT m0) instance ChBufferedScanner m0 => ChBufferedScanner (RecorderT m0) instance ChScanner m0 => ChScanner (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 :: (ChScanner m, ChPrinter m, MonadIO m, Functor m, ChFinalizer m) => [String] -> m () -- | Like cat, but reverses the line order. tac :: (ChFinalizer m, ChScanner m, ChPrinter m, MonadIO m, Functor m) => [String] -> m () -- | Pass-through, simultanously writing all input to a given file. tee :: (ChScanner m, ChPrinter m, MonadIO m, Functor m) => String -> m () -- | Prints the given string, after expanding it. echo :: (ChPrinter m, ChExpand m) => String -> m () -- | Mode for wc. data WcMode CountChars :: WcMode CountLines :: WcMode CountWords :: WcMode -- | Count characters, lines or words of the input. wc :: (ChScanner m, ChPrinter m, MonadIO m, Functor m) => WcMode -> m () -- | Change to given directory. cd :: MonadIO m => String -> m () -- | Print current working directory. pwd :: (MonadIO m, ChPrinter m) => m () -- | List directory contents of the given directories (current one, if -- empty list). ls :: (MonadIO m, ChPrinter m) => [String] -> m () -- | Filters only the first n lines of the input. head :: (ChScanner m, ChPrinter m, MonadIO m, Functor m) => Int -> m () -- | FIlters only the last n lines of the input. tail :: (ChScanner m, ChPrinter m, MonadIO m, Functor m) => Int -> m ()