module HaskellWorks.Data.Json.Internal.Doc
  ( hEncloseSep,
    text,
    red,
    dullgreen,
    cyan,
  ) where

import Prettyprinter

hEncloseSep :: Doc a -> Doc a -> Doc a -> [Doc a] -> Doc a
hEncloseSep :: forall a. Doc a -> Doc a -> Doc a -> [Doc a] -> Doc a
hEncloseSep Doc a
l Doc a
r Doc a
s [Doc a]
ds = case [Doc a]
ds of
  []  -> Doc a
l Doc a -> Doc a -> Doc a
forall a. Semigroup a => a -> a -> a
<> Doc a
r
  [Doc a
d] -> Doc a
l Doc a -> Doc a -> Doc a
forall a. Semigroup a => a -> a -> a
<> Doc a
d Doc a -> Doc a -> Doc a
forall a. Semigroup a => a -> a -> a
<> Doc a
r
  [Doc a]
_   -> [Doc a] -> Doc a
forall ann. [Doc ann] -> Doc ann
hcat ((Doc a -> Doc a -> Doc a) -> [Doc a] -> [Doc a] -> [Doc a]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith Doc a -> Doc a -> Doc a
forall a. Semigroup a => a -> a -> a
(<>) (Doc a
l Doc a -> [Doc a] -> [Doc a]
forall a. a -> [a] -> [a]
: Doc a -> [Doc a]
forall a. a -> [a]
repeat Doc a
s) [Doc a]
ds) Doc a -> Doc a -> Doc a
forall a. Semigroup a => a -> a -> a
<> Doc a
r

text :: String -> Doc a
text :: forall a. String -> Doc a
text = String -> Doc a
forall a. String -> Doc a
forall a ann. Pretty a => a -> Doc ann
pretty

red :: Doc a -> Doc a
red :: forall a. Doc a -> Doc a
red = Doc a -> Doc a
forall a. a -> a
id

dullgreen :: Doc a -> Doc a
dullgreen :: forall a. Doc a -> Doc a
dullgreen = Doc a -> Doc a
forall a. a -> a
id

cyan :: Doc a -> Doc a
cyan :: forall a. Doc a -> Doc a
cyan = Doc a -> Doc a
forall a. a -> a
id