module Data.Morpheus.Generics.Utils
  ( typeOf
  , SelOf
  , RecSel
  ) where

import           Data.Typeable    (Typeable, tyConName, typeRep, typeRepTyCon)
import           Data.Proxy   (Proxy)
import           Data.Text    (Text, pack)
import           GHC.Generics

typeOf :: Typeable a => Proxy a -> Text
typeOf = pack . tyConName . typeRepTyCon . typeRep

type SelOf s = M1 S s (Rec0 ()) ()

type RecSel s a = M1 S s (Rec0 a)