-- SPDX-FileCopyrightText: 2021 Oxhead Alpha
-- SPDX-License-Identifier: LicenseRef-MIT-OA

{-# OPTIONS_GHC -Wno-redundant-constraints #-}

-- | Re-exports "GHC.TypeLits", modifying it considering our practices.
module Morley.Util.TypeLits
  ( Symbol
  , KnownSymbol
  , AppendSymbol
  , symbolVal
  , symbolValT
  , symbolValT'

  , TypeError
  , ErrorMessage (..)

  , AssertTypesEqual
  ) where

import GHC.TypeLits (AppendSymbol, ErrorMessage(..), KnownSymbol, Symbol, TypeError, symbolVal)

import Morley.Util.Type (AssertTypesEqual)

symbolValT :: forall s. KnownSymbol s => Proxy s -> Text
symbolValT :: forall (s :: Symbol). KnownSymbol s => Proxy s -> Text
symbolValT = String -> Text
forall a. ToText a => a -> Text
toText (String -> Text) -> (Proxy s -> String) -> Proxy s -> Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Proxy s -> String
forall (n :: Symbol) (proxy :: Symbol -> *).
KnownSymbol n =>
proxy n -> String
symbolVal

symbolValT' :: forall s. KnownSymbol s => Text
symbolValT' :: forall (s :: Symbol). KnownSymbol s => Text
symbolValT' = Proxy s -> Text
forall (s :: Symbol). KnownSymbol s => Proxy s -> Text
symbolValT (forall {k} (t :: k). Proxy t
forall {t :: Symbol}. Proxy t
Proxy @s)