{-# LANGUAGE OverloadedStrings #-}

module Data.Text.Prettyprint.Doc.Custom ( (<#>)
                                        , (<##>)
                                        , vdisplay
                                        , dashed
                                        ) where

import           Data.Foldable (foldl')
import           Prettyprinter

infixr 5 <#>
infixr 5 <##>

(<#>) :: Doc a -> Doc a -> Doc a
<#> :: forall a. Doc a -> Doc a -> Doc a
(<#>) Doc a
a Doc a
b = Doc a
a Doc a -> Doc a -> Doc a
forall a. Semigroup a => a -> a -> a
<> Doc a
forall ann. Doc ann
line Doc a -> Doc a -> Doc a
forall a. Semigroup a => a -> a -> a
<> Doc a
b

(<##>) :: Doc a -> Doc a -> Doc a
<##> :: forall a. Doc a -> Doc a -> Doc a
(<##>) Doc a
a Doc a
b = Doc a
a Doc a -> Doc a -> Doc a
forall a. Semigroup a => a -> a -> a
<> Doc a
forall ann. Doc ann
hardline Doc a -> Doc a -> Doc a
forall a. Semigroup a => a -> a -> a
<> Doc a
b

vdisplay :: [Doc a] -> Doc a
vdisplay :: forall a. [Doc a] -> Doc a
vdisplay = (Doc a -> Doc a -> Doc a) -> Doc a -> [Doc a] -> Doc a
forall b a. (b -> a -> b) -> b -> [a] -> b
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' Doc a -> Doc a -> Doc a
forall a. Doc a -> Doc a -> Doc a
(<#>) Doc a
forall a. Monoid a => a
mempty

dashed :: [Doc a] -> Doc a
dashed :: forall a. [Doc a] -> Doc a
dashed = (Doc a -> Doc a -> Doc a) -> [Doc a] -> Doc a
forall (t :: * -> *) ann.
Foldable t =>
(Doc ann -> Doc ann -> Doc ann) -> t (Doc ann) -> Doc ann
concatWith (\Doc a
x Doc a
y -> Doc a
x Doc a -> Doc a -> Doc a
forall a. Semigroup a => a -> a -> a
<> Doc a
"-" Doc a -> Doc a -> Doc a
forall a. Semigroup a => a -> a -> a
<> Doc a
y)