packages feed

inferno-types-0.1.0.0: src/Inferno/Utils/Prettyprinter.hs

module Inferno.Utils.Prettyprinter where

import Control.Monad.IO.Class (MonadIO (..))
import qualified Data.Text as Text (Text)
import qualified Data.Text.IO as Text (putStrLn)
import Prettyprinter
  ( Doc,
    LayoutOptions (LayoutOptions),
    PageWidth (AvailablePerLine),
    Pretty (..),
    layoutSmart,
  )
import Prettyprinter.Render.Text (renderStrict)

renderDoc :: Doc ann -> Text.Text
renderDoc = renderStrict . layoutSmart (LayoutOptions (AvailablePerLine 80 1))

renderPretty :: Pretty a => a -> Text.Text
renderPretty = renderDoc . pretty

showPretty :: MonadIO m => Pretty a => a -> m ()
showPretty = liftIO . Text.putStrLn . renderPretty