module Ether.Internal.Tags
  ( Tags
  , TagsK
  , HList(..)
  , KindOf
  ) where

import Data.Kind

data HList xs where
  HNil :: HList '[]
  HCons :: x -> HList xs -> HList (x ': xs)

type KindOf (a :: k) = k

type family TagsK (p :: Type) :: [Type]
type family Tags  (p :: Type) :: HList (TagsK p)