module Mensam.API.Pretty where import Data.Kind import Data.Text qualified as Text import Data.Text.Encoding qualified as Text.Encoding import Data.Time.Format.ISO8601 qualified as Time import Data.Time.LocalTime qualified as Time import Data.Time.Zones.All qualified as Time import Text.Blaze.Html5 qualified as Html5 type ToPrettyText :: Type -> Constraint class ToPrettyText a where toPrettyText :: a -> Text.Text type ToPrettyHtml5 :: Type -> Constraint class ToPrettyHtml5 a where toPrettyHtml5 :: a -> Html5.Html type PrettyTextViaShow :: Type -> Type newtype PrettyTextViaShow a = MkPrettyTextViaShow {forall a. PrettyTextViaShow a -> a unPrettyTextViaShow :: a} instance Show a => ToPrettyText (PrettyTextViaShow a) where toPrettyText :: PrettyTextViaShow a -> Text toPrettyText = String -> Text Text.pack (String -> Text) -> (PrettyTextViaShow a -> String) -> PrettyTextViaShow a -> Text forall b c a. (b -> c) -> (a -> b) -> a -> c . a -> String forall a. Show a => a -> String show (a -> String) -> (PrettyTextViaShow a -> a) -> PrettyTextViaShow a -> String forall b c a. (b -> c) -> (a -> b) -> a -> c . PrettyTextViaShow a -> a forall a. PrettyTextViaShow a -> a unPrettyTextViaShow type PrettyHtml5ViaPrettyText :: Type -> Type newtype PrettyHtml5ViaPrettyText a = MkPrettyHtml5ViaPrettyText {forall a. PrettyHtml5ViaPrettyText a -> a unPrettyHtml5ViaPrettyText :: a} instance ToPrettyText a => ToPrettyHtml5 (PrettyHtml5ViaPrettyText a) where toPrettyHtml5 :: PrettyHtml5ViaPrettyText a -> Html toPrettyHtml5 = Text -> Html forall a. ToMarkup a => a -> Html Html5.toHtml (Text -> Html) -> (PrettyHtml5ViaPrettyText a -> Text) -> PrettyHtml5ViaPrettyText a -> Html forall b c a. (b -> c) -> (a -> b) -> a -> c . a -> Text forall a. ToPrettyText a => a -> Text toPrettyText (a -> Text) -> (PrettyHtml5ViaPrettyText a -> a) -> PrettyHtml5ViaPrettyText a -> Text forall b c a. (b -> c) -> (a -> b) -> a -> c . PrettyHtml5ViaPrettyText a -> a forall a. PrettyHtml5ViaPrettyText a -> a unPrettyHtml5ViaPrettyText instance ToPrettyText Time.TZLabel where toPrettyText :: TZLabel -> Text toPrettyText = ByteString -> Text Text.Encoding.decodeUtf8 (ByteString -> Text) -> (TZLabel -> ByteString) -> TZLabel -> Text forall b c a. (b -> c) -> (a -> b) -> a -> c . TZLabel -> ByteString Time.toTZName deriving via PrettyHtml5ViaPrettyText Time.TZLabel instance ToPrettyHtml5 Time.TZLabel instance ToPrettyText Time.LocalTime where toPrettyText :: LocalTime -> Text toPrettyText = String -> Text Text.pack (String -> Text) -> (LocalTime -> String) -> LocalTime -> Text forall b c a. (b -> c) -> (a -> b) -> a -> c . LocalTime -> String forall t. ISO8601 t => t -> String Time.iso8601Show deriving via PrettyHtml5ViaPrettyText Time.LocalTime instance ToPrettyHtml5 Time.LocalTime