content: module DefinedNamesProp where
  import DefinedNames
  import DefinedNamesPropStruct()
  import DefinedNamesBase()
  import PropSyntax(HsDeclI,Prop,prop,mapProp,struct,listBase)
  import TiNames(ValueId)
  
  instance DefinedNames i (HsDeclI i) where
    definedNames = definedNamesRec
  
  instance ClassMethods i (HsDeclI i) where
    classMethods c cnt = listBase (classMethods c cnt) . struct
  
  instance ValueId i => AddName i (HsDeclI i) where addName = addNameRec
  
  instance MapDefinedNames i (HsDeclI i) where mapDefinedNames = mapDefinedNamesRec
  {-
  instance DefinedNames i (HsPatI i) where
    definedNames = definedNamesRec
  -}
  
  instance (DefinedNames i b,DefinedNames i p) => DefinedNames i (Prop b p) where
    definedNames = prop definedNames definedNames
  
  instance (ClassMethods i b,ClassMethods i p) => ClassMethods i (Prop b p) where
    classMethods c cnt = prop (classMethods c cnt) (classMethods c cnt)
  
  instance (AddName i b,AddName i p) => AddName i (Prop b p) where
    addName = mapProp addName addName
  
  instance (MapDefinedNames i b,MapDefinedNames i p)
        => MapDefinedNames i (Prop b p) where
    mapDefinedNames f = mapProp m m
      where m x = mapDefinedNames f x
  