module Language.Haskell.TH.Hide(export) where
import Data.List(partition)
import Language.Haskell.TH

export :: [Name] -> [Dec] -> Q [Dec]
export el = buildClause el . partition whereable where
  whereable :: Dec -> Bool
  whereable d = case d of
    (FunD  _ _) -> True
    (ValD _ _ _) -> True
    (SigD _ _)   -> True
    (PragmaD _)  -> True
    _            -> False

buildClause el (wh,tl) = do
  v <- valD 
    (tupP [varP n | n <- el]) 
    (normalB $ tupE [varE n | n <- el])
    (map return wh)
  return $ v : tl