hindent-6.3.0: src/HIndent/Pretty/Combinators/Outputable.hs
{-# LANGUAGE CPP #-}
-- | Printer combinators for printing values of types implementing
-- 'Outputable'.
module HIndent.Pretty.Combinators.Outputable
( output
, showOutputable
) where
import GHC.Driver.Ppr
import GHC.Driver.Session
import GHC.Stack
import GHC.Utils.Outputable
import HIndent.Pretty.Combinators.String
import HIndent.Printer
import Language.Haskell.GhclibParserEx.GHC.Settings.Config
-- | Prints the given value using the type's 'Outputable' implementation.
--
-- The use of this function should be avoided for these reasons:
--
-- * It may raise an error due to 'showPpr' returning a 'String' containing
-- @\n@s. Use 'newline' to print @\n@s.
--
-- * ghc-lib-parser may change a type's implementation of 'Outputable',
-- causing a sudden test failure. It becomes a maintaince burden.
--
-- * All comments of the node's children are ignored.
output :: (HasCallStack, Outputable a) => a -> Printer ()
output = string . showOutputable
-- | Converts the given value to a 'String'.
showOutputable :: Outputable a => a -> String
showOutputable = showPpr dynFlags
-- | 'DynFlags' for calling 'showPpr'
dynFlags :: DynFlags
#if MIN_VERSION_ghc_lib_parser(9,6,1)
dynFlags = defaultDynFlags fakeSettings
#else
dynFlags = defaultDynFlags fakeSettings fakeLlvmConfig
#endif