{-|
Module      : Pipes.KeyValueCsv.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
  , ExplicitForAll
  , PolyKinds
  #-}

module Pipes.KeyValueCsv.Names
  ( module Pipes.KeyValueCsv.Names
  , FieldAll
  , Record
  ) where

import qualified Pipes.KeyValueCsv.Internal.Names as Internal

import Data.Proxy
import Data.Vinyl
import Data.Vinyl.Functor
import Data.Vinyl.Utils.Field
import Data.Vinyl.Utils.Proxy
import Data.Text (Text)
import Data.Typeable

names :: forall (rs :: [k]). (FieldAll rs Typeable, Record rs) => Rec (Const Text) rs
names = Internal.names $ reifyFieldConstraint (Proxy :: Proxy Typeable) proxyRecord