gendocs-0.1.0.0: src/Data/Docs/TypeName.hs
{-# LANGUAGE DefaultSignatures #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Data.Docs.TypeName
( typeName
, GTypeName(gtypename)
) where
import Data.Data (Proxy(..))
import GHC.Generics
-- | Get the typename for anything that has a simple one. https://gist.github.com/nh2/1a03b7873dbed348ef64fe536028776d
typeName :: forall a. (Generic a, GTypeName (Rep a)) => Proxy a -> String
typeName _proxy = gtypename (from (undefined :: a))
class GTypeName f where
gtypename :: f a -> String
instance (Datatype c) => GTypeName (M1 i c f) where
gtypename m = datatypeName m