{-# LANGUAGE DerivingVia #-} {-# LANGUAGE UndecidableInstances #-} module JVM.Data.Pretty (showPretty, tracePrettyId, Pretty (..), (<+>), hsep) where import Data.String import Data.Text (unpack) import Debug.Trace (trace) import Prettyprinter import Prettyprinter.Render.Text (renderStrict) showPretty :: (IsString s) => (Pretty a) => a -> s showPretty :: forall s a. (IsString s, Pretty a) => a -> s showPretty = String -> s forall a. IsString a => String -> a fromString (String -> s) -> (a -> String) -> a -> s forall b c a. (b -> c) -> (a -> b) -> a -> c . Text -> String unpack (Text -> String) -> (a -> Text) -> a -> String forall b c a. (b -> c) -> (a -> b) -> a -> c . SimpleDocStream (ZonkAny 0) -> Text forall ann. SimpleDocStream ann -> Text renderStrict (SimpleDocStream (ZonkAny 0) -> Text) -> (a -> SimpleDocStream (ZonkAny 0)) -> a -> Text forall b c a. (b -> c) -> (a -> b) -> a -> c . LayoutOptions -> Doc (ZonkAny 0) -> SimpleDocStream (ZonkAny 0) forall ann. LayoutOptions -> Doc ann -> SimpleDocStream ann layoutPretty LayoutOptions defaultLayoutOptions (Doc (ZonkAny 0) -> SimpleDocStream (ZonkAny 0)) -> (a -> Doc (ZonkAny 0)) -> a -> SimpleDocStream (ZonkAny 0) forall b c a. (b -> c) -> (a -> b) -> a -> c . a -> Doc (ZonkAny 0) forall ann. a -> Doc ann forall a ann. Pretty a => a -> Doc ann pretty instance Pretty (Doc a) where pretty :: forall ann. Doc a -> Doc ann pretty = Doc a -> Doc ann forall a ann. Doc a -> Doc ann unAnnotate tracePrettyId :: (Pretty a) => a -> a tracePrettyId :: forall a. Pretty a => a -> a tracePrettyId a a = String -> a -> a forall a. String -> a -> a trace (a -> String forall s a. (IsString s, Pretty a) => a -> s showPretty a a) a a