{-# language StandaloneKindSignatures #-}

-- | Description: 'ErrorMessage' concatenation operators, stolen from type-errors-pretty.
module Incipit.TypeError where

import GHC.TypeLits (ErrorMessage (..), Symbol)

type (<>) :: k1 -> k2 -> ErrorMessage
type family (<>) l r :: ErrorMessage where
  l <> r = ToErrorMessage l ':<>: ToErrorMessage r

infixl 5 <>

type (%) :: k1 -> k2 -> ErrorMessage
type family (%) t b :: ErrorMessage where
  t % b = ToErrorMessage t ':$$: ToErrorMessage b

infixr 4 %

type ToErrorMessage :: k -> ErrorMessage
type family ToErrorMessage t where
  ToErrorMessage (t :: Symbol) = 'Text t
  ToErrorMessage (t :: ErrorMessage) = t
  ToErrorMessage t = 'ShowType t