Free names

The type checker needs to compute strongly connected components of declarations, in accordance with the Haskell report. This means that we need to know which names are used in a declaration, in addition to which names are defined:
class FreeNames i t | t -> i where
  freeNames :: t -> [(HsIdent i,NameSpace)]

See modules DefinedNames, DefinedNamesBaseStruct, DefinedNamesBase.