packages feed

mit-3qvpPyAi6mH-8: src/Mit/Builder.hs

module Mit.Builder
  ( empty,
    build,
    hcat,
    newline,
    put,
    putln,
    space,
    squoted,
    vcat,
  )
where

import Data.List qualified as List
import Data.Text.IO qualified as Text
import Data.Text.Lazy qualified as Text.Lazy
import Data.Text.Lazy.Builder
import Mit.Prelude

empty :: Builder
empty =
  mempty

build :: Builder -> Text
build =
  Text.Lazy.toStrict . toLazyText

hcat :: Foldable f => f Builder -> Builder
hcat =
  mconcat . List.intersperse space . toList

newline :: Builder
newline =
  singleton '\n'

put :: Builder -> IO ()
put =
  Text.putStr . build

putln :: Builder -> IO ()
putln =
  Text.putStrLn . build

space :: Builder
space =
  singleton ' '

squote :: Builder
squote =
  singleton '\''

squoted :: Builder -> Builder
squoted s =
  squote <> s <> squote

vcat :: Foldable f => f Builder -> Builder
vcat =
  mconcat . List.intersperse newline . toList