{-# LANGUAGE CPP #-}
#if (__GLASGOW_HASKELL__ < 709)
{-# LANGUAGE OverlappingInstances #-}
{-# OPTIONS_GHC -fno-warn-unrecognised-pragmas #-}
#endif
{- |
   Description: labels are any instance of Typeable

   The HList library

   (C) 2004, Oleg Kiselyov, Ralf Laemmel, Keean Schupke

   Yet another model of labels.

   This model allow us to use any type as label type.
   As a result, we need some generic instances.

   Also, type errors may be more confusing now.
-}

module Data.HList.Label5 where

import Data.Typeable
import Data.Char
import Data.HList.FakePrelude


-- | Equality on labels

-- instance TypeEq x y b => HEq x y b


-- | Show label
instance {-# OVERLAPPABLE #-} Typeable (x :: *) => ShowLabel x
 where
  showLabel _ = (\(x:xs) -> toLower x:xs)
            . reverse
            . takeWhile (not . (==) '.')
            . reverse
            . show
{-
            . tyConString
            . typeRepTyCon
-}
            . typeOf $ (error "Data.HList.Label5 has a strict typeOf" :: x)