| 78 | | == Occurrence names: {{{OccName}}} == |
| 79 | | |
| 80 | | An {{{OccName}}} is more-or-less just a string, like "foo" or "Tree", giving the (unqualified) name of an entity. |
| 81 | | Well, not quite just a string, because in Haskell a name like "C" could mean a type constructor or data constructor, depending on context. So GHC defines a type OccName (defined in basicTypes/OccName.lhs) that is a pair of a {{{FastString}}} and a {{{NameSpace}}} indicating which name space the name is drawn from. The data type is defined (abstractly) in [[GhcFile(compiler/basicTypes/OccName.lhs)]]: |
| 82 | | {{{ |
| 83 | | data OccName = OccName NameSpace EncodedFS |
| 84 | | }}} |
| 85 | | The {{{EncodedFS}}} is a synonym for {{{FastString}}} indicating that the string is Z-encoded. (Details in [[GhcFile(compiler/basicTypes/OccName.lhs)]].) Z-encoding encodes funny characters like '%' and '$' into alphabetic characters, like "zp" and "zd", so that they can be used in object-file symbol tables without confusing linkers and suchlike. |
| 86 | | |
| 87 | | The name spaces are: |
| 88 | | |
| 89 | | {{{ |
| 90 | | data NameSpace = VarName -- Variables, including "source" data constructors |
| 91 | | | DataName -- "Real" data constructors |
| 92 | | | TvName -- Type variables |
| 93 | | | TcClsName -- Type constructors and classes; Haskell has them |
| 94 | | -- in the same name space for now. |
| 95 | | }}} |
| 96 | | |