{-# LANGUAGE OverloadedStrings #-}
module Expresso.Pretty (
      module Text.PrettyPrint.Leijen
    , parensList
    , bracketsList
    , bracesList
    , sepBy
    , catBy
    , render
    ) where
import Data.String
import Text.PrettyPrint.Leijen ( Doc, (<+>), (<//>), angles, braces, brackets
                               , comma, dot, dquotes, empty, hcat, hsep, indent
                               , int, integer, double, parens, space, text, string, vcat)
import qualified Text.PrettyPrint.Leijen as PP
instance IsString Doc where
  fromString = text
bracketsList :: [Doc] -> Doc
bracketsList = brackets . hsep . PP.punctuate comma
parensList :: [Doc] -> Doc
parensList = parens . hsep . PP.punctuate comma
bracesList :: [Doc] -> Doc
bracesList = braces . hsep . PP.punctuate comma
sepBy :: Doc -> [Doc] -> Doc
sepBy d = hsep . PP.punctuate d
catBy :: Doc -> [Doc] -> Doc
catBy d = hcat . PP.punctuate d
render :: PP.Doc -> String
render doc = PP.displayS (PP.renderPretty 0.8 100 doc) []