{-# 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