stgi-1: src/Stg/Language/Prettyprint.hs
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
-- | Prettyprinting STG elements in various formats.
module Stg.Language.Prettyprint (
Pretty(..),
prettyprint,
prettyprintPlain,
) where
import Data.Text (Text)
import qualified Data.Text as T
import Prelude hiding ((<$>))
import Text.PrettyPrint.ANSI.Leijen
-- | Prettyprint a value as 'Text', including styles such as colours.
prettyprint :: Pretty a => a -> Text
prettyprint = prettyprintModified id
-- | Prettyprint a value as 'Text', stripped off all style information such as
-- colours.
prettyprintPlain :: Pretty a => a -> Text
prettyprintPlain = prettyprintModified plain
prettyprintModified :: Pretty a => (Doc -> Doc) -> a -> Text
prettyprintModified modifier input =
T.pack (displayS (renderPretty 0.4 1000 (modifier (pretty input))) "")