content: {-# LANGUAGE CPP #-}
  {-# OPTIONS_GHC -fno-warn-orphans #-}
  {-# OPTIONS_HADDOCK ignore-exports #-}
  
  module XPrelude.PP
    ( module Exports,
      PrettyError (..),
      ppline,
      pplines,
      pptext,
      ppstring,
    )
  where
  
  import Data.Scientific
  import Data.Semigroup as Sem
  import Data.String
  import qualified Data.Text as Text
  import Protolude
  import Text.PrettyPrint.ANSI.Leijen (string, text)
  import Text.PrettyPrint.ANSI.Leijen as Exports hiding
    ( bool,
      cat,
      char,
      double,
      empty,
      float,
      group,
      int,
      integer,
      rational,
      string,
      text,
      (<$>),
    )
  
  newtype PrettyError = PrettyError
    { getError :: Doc
    }
    deriving (Show)
  
  instance Sem.Semigroup PrettyError where
    a <> b = PrettyError $ align (vsep [getError a, getError b])
  
  instance Monoid PrettyError where
    mempty = PrettyError mempty
  #if !(MIN_VERSION_base(4,11,0))
    mappend = (Sem.<>)
  #endif
  
  instance IsString PrettyError where
    fromString = PrettyError . string
  
  instance Pretty PrettyError where
    pretty = getError
  
  instance Pretty Scientific where
    pretty = text . show
  
  -- | pretty print multiple lines of text.
  pplines :: Text -> Doc
  pplines = string . Text.unpack
  
  -- | pretty print a single line of text.
  ppline :: Text -> Doc
  ppline = text . Text.unpack
  
  -- | pretty print multiple lines of string.
  ppstring :: String -> Doc
  ppstring = string
  
  -- | pretty print one line of string
  pptext :: String -> Doc
  pptext = text
  