0 | module Hedgehog.Internal.Terminal
2 | import Control.Monad.Writer.Interface
12 | interface HasTerminal m where
27 | putTmp : TermTy -> String -> m ()
32 | putOut : TermTy -> String -> m ()
37 | 0 Terminal : (0 m : _) -> HasTerminal m => Type
38 | Terminal m = TermTy {m}
40 | putStrErr : HasIO io => String -> io ()
41 | putStrErr s = fPutStr stderr s $> ()
43 | replicate : Monoid m => Nat -> m -> m
44 | replicate Z x = neutral
45 | replicate (S n) x = x <+> replicate n x
47 | clearIOTmp : IORef Nat -> IO ()
49 | linesCnt <- readIORef tmp
50 | putStrErr $
Terminal.replicate linesCnt $
cursorUp1 <+> eraseLine End
55 | HasIO io => HasTerminal io where
57 | console = liftIO $
newIORef 0
58 | putTmp t str = liftIO $
do
60 | writeIORef t $
length $
lines str
62 | putOut t str = liftIO $
clearIOTmp t *> putStr str
70 | [StdoutOnly] MonadWriter (List String) m => HasTerminal m where
73 | putTmp _ _ = pure ()
74 | putOut _ str = tell [str]
77 | data StdoutOrTmp = Stdout | Tmp
88 | [StdoutAndTmp] MonadWriter (List (StdoutOrTmp, String)) m => HasTerminal m where
91 | putTmp _ str = tell [(Tmp, str)]
92 | putOut _ str = tell [(Stdout, str)]