{-# LANGUAGE Haskell2010
    , ScopedTypeVariables
    , TypeOperators
 #-}

{- | Type level names.

Names are like strings on the type level.
This is a name:

> H :& E :& L :& L :& O :& W_ :& O :& R :& L :& D

This package provides types which can be used
as letters and a cons operator (@:&@). It also
provides syntactic sugar for using names via
template haskell:

> name "helloWorld"

This will create a value named @helloWorld@
which has the above type and can be used to
work with the name.

Names are useful for named records. See the
@named-records@ package.

-}
module Data.Name (
    (:&),
    module Data.Name.Internal.Names,

    name, nameT, nameV
) where


import Data.Name.Internal.Names
import Data.Name.Internal.TH


instance (Show a, Show b) => Show (a :& b) where
    show _ = let showA = show :: a -> String
                 showB = show :: b -> String
             in showA undefined ++ showB undefined