6.3.4. Explicit namespaces in import/export — Glasgow Haskell Compiler 9.0.1 User's Guide

# 6.3.4. Explicit namespaces in import/export

`ExplicitNamespaces`

  Since: | 7.6.1

  Enable use of explicit namespaces in module export lists.

In an import or export list, such as

    module M( f, (++) ) where ...
      import N( f, (++) )
      ...

the entities `f` and `(++)` are values. However, with type operators (Type operators) it becomes possible to declare `(++)` as a type constructor. In that case, how would you export or import it?

The `ExplicitNamespaces` extension allows you to prefix the name of a type constructor in an import or export list with “`type`” to disambiguate this case, thus:

    module M( f, type (++) ) where ...
      import N( f, type (++) )
      ...
    module N( f, type (++) ) where
      data family a ++ b = L a | R b

The extension `ExplicitNamespaces` is implied by `TypeOperators` and (for some reason) by `TypeFamilies`.

In addition, with `PatternSynonyms` you can prefix the name of a data constructor in an import or export list with the keyword `pattern`, to allow the import or export of a data constructor without its parent type constructor (see Import and export of pattern synonyms).