{-# LANGUAGE GADTs #-}
{-# LANGUAGE LambdaCase #-}
module Cardano.Base.Typeable (
module X,
TypeName (..),
) where
import Data.String (IsString (fromString))
import Data.Typeable as X
data TypeName a where
TypeNameString :: String -> TypeName a
TypeName :: Typeable a => TypeName a
instance IsString (TypeName a) where
fromString :: String -> TypeName a
fromString = String -> TypeName a
forall a. String -> TypeName a
TypeNameString
instance Show (TypeName a) where
show :: TypeName a -> String
show = \case
TypeNameString String
name -> String
name
t :: TypeName a
t@(TypeName {}) -> TypeRep -> String
forall a. Show a => a -> String
show (TypeName a -> TypeRep
forall {k} (proxy :: k -> *) (a :: k).
Typeable a =>
proxy a -> TypeRep
typeRep TypeName a
t)