module DebugPrint.Tagged
  ( tag
  , Tagged (..)
  ) where

import Prelude

import Data.Text qualified as T
import DebugPrint.Class
import DebugPrint.Types
import GHC.Generics (Generic)

-- | Useful for debug-printing discriminated unions
data Tagged = Tagged {Tagged -> Text
tag :: T.Text, Tagged -> DebugPrintValue
value :: DebugPrintValue}
  deriving stock ((forall x. Tagged -> Rep Tagged x)
-> (forall x. Rep Tagged x -> Tagged) -> Generic Tagged
forall x. Rep Tagged x -> Tagged
forall x. Tagged -> Rep Tagged x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. Tagged -> Rep Tagged x
from :: forall x. Tagged -> Rep Tagged x
$cto :: forall x. Rep Tagged x -> Tagged
to :: forall x. Rep Tagged x -> Tagged
Generic)
  deriving anyclass (Tagged -> DebugPrintRecord
(Tagged -> DebugPrintRecord) -> ToDebugPrintRecord Tagged
forall a. (a -> DebugPrintRecord) -> ToDebugPrintRecord a
$ctoDebugPrintRecord :: Tagged -> DebugPrintRecord
toDebugPrintRecord :: Tagged -> DebugPrintRecord
ToDebugPrintRecord, Tagged -> DebugPrintValue
(Tagged -> DebugPrintValue) -> ToDebugPrintValue Tagged
forall a. (a -> DebugPrintValue) -> ToDebugPrintValue a
$ctoDebugPrintValue :: Tagged -> DebugPrintValue
toDebugPrintValue :: Tagged -> DebugPrintValue
ToDebugPrintValue)

tag :: ToDebugPrintValue a => T.Text -> a -> DebugPrintValue
tag :: forall a. ToDebugPrintValue a => Text -> a -> DebugPrintValue
tag Text
t = Tagged -> DebugPrintValue
forall a. ToDebugPrintValue a => a -> DebugPrintValue
toDebugPrintValue (Tagged -> DebugPrintValue)
-> (a -> Tagged) -> a -> DebugPrintValue
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> DebugPrintValue -> Tagged
Tagged Text
t (DebugPrintValue -> Tagged)
-> (a -> DebugPrintValue) -> a -> Tagged
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> DebugPrintValue
forall a. ToDebugPrintValue a => a -> DebugPrintValue
toDebugPrintValue