{-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleInstances, MultiParamTypeClasses, UndecidableInstances #-} {- | The HList library (C) 2004-2006, Oleg Kiselyov, Ralf Laemmel, Keean Schupke A model of label as needed for extensible records. Record labels are simply type-level naturals. This models is as simple and as portable as it could be. -} module Data.HList.Label1 where import Data.HList.FakePrelude hiding (Label(..)) import Data.HList.Record (ShowLabel(..)) -- | Labels are type-level naturals newtype Label x = Label x deriving Show -- | Public constructors for labels label :: HNat n => n -> Label n label = Label -- | Construct the first label firstLabel :: Label 'HZero firstLabel = label hZero -- | Construct the next label nextLabel :: Label t -> Label ('HSucc t) nextLabel (Label n) = label (hSucc n) -- | Equality on labels instance HEq n n' b => HEq (Label n) (Label n') b -- | Show label instance Show n => ShowLabel (Label n) where showLabel (Label n) = show n