module TH where

import Language.Haskell.TH.Syntax
import Language.Haskell.TH.Ppr
import Language.Haskell.TH.PprLib

show_kinds :: Name -> Q [Dec]
show_kinds name = do
  info <- reify name
  case info of
    TyConI (DataD _ _ tvbs _ _) ->
      (fail . show . hsep . map (parens . each)) tvbs
      where each (PlainTV name) =
              ppr name <+> colon <> colon <+> ppr StarK
            each (KindedTV name kind) =
              ppr name <+> colon <> colon <+> ppr kind
    _ -> fail "show_kinds must be applied to a data declaration"
