{-# LANGUAGE KindSignatures #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE StrictData #-} module Network.Tox.TypeName ( typeName ) where import Data.Kind (Type) import Data.Typeable (Typeable) import qualified Data.Typeable as Typeable typeName :: Typeable (a :: Type) => proxy a -> String typeName :: proxy a -> String typeName (proxy a _ :: proxy a) = TypeRep -> String forall a. Show a => a -> String show (TypeRep -> String) -> (a -> TypeRep) -> a -> String forall b c a. (b -> c) -> (a -> b) -> a -> c . a -> TypeRep forall a. Typeable a => a -> TypeRep Typeable.typeOf (a -> String) -> a -> String forall a b. (a -> b) -> a -> b $ (a forall a. HasCallStack => a undefined :: a)