module TiFreeNames(module TiFreeNames,FreeNames(..)) where
import FreeNames
import HsIdent
import Maybe(mapMaybe)

freeTypeNames x = mapMaybe freeTypeName . freeNames $ x
freeValueNames x = mapMaybe freeValueName . freeNames $ x

freeVars x = filter isHsVar . freeValueNames $ x
freeTyvars x = filter isHsVar . freeTypeNames $ x

freeTypeName (n,ClassOrTypeNames) = Just n
freeTypeName (n,_) = Nothing

freeValueName (n,ValueNames) = Just n
freeValueName (n,_) = Nothing

-- Get the type parameters from the lhs of a type/newtype/data/class decl:
typeParams tp = [v|HsVar v<-freeTyvars tp] -- Hmm. Order?
