11{-# LANGUAGE CPP #-}
22{-# LANGUAGE DerivingStrategies #-}
3- module Builder where
3+ module Builder (
4+ module Builder
5+ , Color (.. )
6+ ) where
47
5- import Imports
8+ import Imports hiding ( join , unlines )
69
710import Data.List qualified as List
811import Data.ByteString qualified as ByteString
912import Data.Text.Encoding qualified as Text
1013import Data.Text.Internal.StrictBuilder qualified as StrictBuilder
14+ import System.Console.ANSI
1115
1216#if MIN_VERSION_text(2,1,2)
1317newtype Builder = Builder StrictBuilder. StrictTextBuilder
@@ -17,7 +21,10 @@ newtype Builder = Builder StrictBuilder.StrictBuilder
1721 deriving newtype (Semigroup , Monoid )
1822
1923instance IsString Builder where
20- fromString = fromText . fromString
24+ fromString = Builder. fromString
25+
26+ fromString :: String -> Builder
27+ fromString = fromText . Imports. fromString
2128
2229fromText :: Text -> Builder
2330fromText = Builder . StrictBuilder. fromText
@@ -33,7 +40,24 @@ readFile name = do
3340 False -> either throwIO (return . fromText) $ Text. decodeUtf8' c
3441
3542show :: Show a => a -> Builder
36- show = fromString . Imports. show
43+ show = Builder. fromString . Imports. show
3744
3845join :: Builder -> [Builder ] -> Builder
3946join sep = mconcat . List. intersperse sep
47+
48+ unlines :: [Builder ] -> Builder
49+ unlines = \ case
50+ [] -> mempty
51+ l : ls -> l <> " \n " <> unlines ls
52+
53+ withColor :: Color -> Builder -> Builder
54+ withColor color string = set <> string <> reset
55+ where
56+ set :: Builder
57+ set = Builder. fromString $ setSGRCode [SetColor Foreground Dull color]
58+
59+ reset :: Builder
60+ reset = Builder. fromString $ setSGRCode []
61+
62+ toByteString :: Builder -> ByteString
63+ toByteString = Text. encodeUtf8 . Builder. toText
0 commit comments