{-|
Module      : Pipes.KeyValueCsv.Internal.Names
Copyright   : (c) Marcin Mrotek, 2015
License     : BSD3
Maintainer  : marcin.jan.mrotek@gmail.com
Stability   : experimental

Default key name generation by printing the field label type names.
-}

{-# LANGUAGE
    DataKinds
  , GADTs
  , PolyKinds
  #-}

module Pipes.KeyValueCsv.Internal.Names where

import Data.Vinyl
import Data.Vinyl.Functor
import Data.Vinyl.Utils.Field
import Data.Text (Text)
import qualified Data.Text as Text
import Data.Typeable

names :: Rec (DictProxy Typeable) rs -> Rec (Const Text) rs
-- ^Construct a record of 'Text' from a record of 'Proxy'ies enriched with 'Typeable' constraints.
names RNil = RNil
names (p@DictProxy :& ps) = (Const . Text.pack . show . typeRep $ getProxy p) :& names ps