================================================================================
import: unqualified module plain
================================================================================

module A where

import A

a = a

--------------------------------------------------------------------------------

(haskell
  (header
    (module
      (module_id)))
  (imports
    (import
      (module
        (module_id))))
  (declarations
    (bind
      (variable)
      (match
        (variable)))))

================================================================================
import: unqualified module with empty export list
================================================================================

import A ()

--------------------------------------------------------------------------------

(haskell
  (imports
    (import
      (module
        (module_id))
      (import_list))))

================================================================================
import: unqualified module with alias
================================================================================

import A as A

--------------------------------------------------------------------------------

(haskell
  (imports
    (import
      (module
        (module_id))
      (module
        (module_id)))))

================================================================================
import: qualified module
================================================================================

import A.A

--------------------------------------------------------------------------------

(haskell
  (imports
    (import
      (module
        (module_id)
        (module_id)))))

================================================================================
import: var only
================================================================================

import Aaa.A (aa)

--------------------------------------------------------------------------------

(haskell
  (imports
    (import
      (module
        (module_id)
        (module_id))
      (import_list
        (import_name
          (variable))))))

================================================================================
import: type only
================================================================================

import Aaa.A (A)

--------------------------------------------------------------------------------

(haskell
  (imports
    (import
      (module
        (module_id)
        (module_id))
      (import_list
        (import_name
          (name))))))

================================================================================
import: type with constructor
================================================================================

import Aaa.A (A(A))

--------------------------------------------------------------------------------

(haskell
  (imports
    (import
      (module
        (module_id)
        (module_id))
      (import_list
        (import_name
          (name)
          (children
            (constructor)))))))

================================================================================
import: type with var
================================================================================

import Aaa.A (A(aa))

--------------------------------------------------------------------------------

(haskell
  (imports
    (import
      (module
        (module_id)
        (module_id))
      (import_list
        (import_name
          (name)
          (children
            (variable)))))))

================================================================================
import: type with symbolic var
================================================================================

import Aaa.A (A((<>)))

--------------------------------------------------------------------------------

(haskell
  (imports
    (import
      (module
        (module_id)
        (module_id))
      (import_list
        (import_name
          (name)
          (children
            (prefix_id
              (operator))))))))

================================================================================
import: type dotdot
================================================================================

import Aaa.A (A(..))

--------------------------------------------------------------------------------

(haskell
  (imports
    (import
      (module
        (module_id)
        (module_id))
      (import_list
        (import_name
          (name)
          (children
            (all_names)))))))

================================================================================
import: qualified basic
================================================================================

import qualified Aaa.A
import qualified A ()
import qualified Aaa.A (a)
import Aaa.A qualified (a)
import qualified Aaa.A hiding (A, a)

--------------------------------------------------------------------------------

(haskell
  (imports
    (import
      (module
        (module_id)
        (module_id)))
    (import
      (module
        (module_id))
      (import_list))
    (import
      (module
        (module_id)
        (module_id))
      (import_list
        (import_name
          (variable))))
    (import
      (module
        (module_id)
        (module_id))
      (import_list
        (import_name
          (variable))))
    (import
      (module
        (module_id)
        (module_id))
      (import_list
        (import_name
          (name))
        (import_name
          (variable))))))

================================================================================
import: qualified as
================================================================================

module A where

import qualified Aaa.A as A
import qualified Aaa.A as A (A(A, a), aa)
import qualified A as A ()

-- a

import qualified Aaa.A as A
import qualified Aaa.A as Aaa.A
import qualified Aaa.A as A hiding (a)

data A = A

--------------------------------------------------------------------------------

(haskell
  (header
    (module
      (module_id)))
  (imports
    (import
      (module
        (module_id)
        (module_id))
      (module
        (module_id)))
    (import
      (module
        (module_id)
        (module_id))
      (module
        (module_id))
      (import_list
        (import_name
          (name)
          (children
            (constructor)
            (variable)))
        (import_name
          (variable))))
    (import
      (module
        (module_id))
      (module
        (module_id))
      (import_list))
    (comment)
    (import
      (module
        (module_id)
        (module_id))
      (module
        (module_id)))
    (import
      (module
        (module_id)
        (module_id))
      (module
        (module_id)
        (module_id)))
    (import
      (module
        (module_id)
        (module_id))
      (module
        (module_id))
      (import_list
        (import_name
          (variable)))))
  (declarations
    (data_type
      (name)
      (data_constructors
        (data_constructor
          (prefix
            (constructor)))))))

================================================================================
import: prim
================================================================================

import Aaa.Aa (Aa#, aa#)

--------------------------------------------------------------------------------

(haskell
  (imports
    (import
      (module
        (module_id)
        (module_id))
      (import_list
        (import_name
          (name))
        (import_name
          (variable))))))

================================================================================
import: package
================================================================================

import "a" Aaa.Aa
import qualified "a" Aaa.Aa as Aa (Aa(a))

--------------------------------------------------------------------------------

(haskell
  (imports
    (import
      (import_package)
      (module
        (module_id)
        (module_id)))
    (import
      (import_package)
      (module
        (module_id)
        (module_id))
      (module
        (module_id))
      (import_list
        (import_name
          (name)
          (children
            (variable)))))))

================================================================================
import: consym
================================================================================

import A ((:<|>)((:<|>)))

--------------------------------------------------------------------------------

(haskell
  (imports
    (import
      (module
        (module_id))
      (import_list
        (import_name
          (prefix_id
            (constructor_operator))
          (children
            (prefix_id
              (constructor_operator))))))))

================================================================================
import: operator
================================================================================

import A ((<=<))

--------------------------------------------------------------------------------

(haskell
  (imports
    (import
      (module
        (module_id))
      (import_list
        (import_name
          (prefix_id
            (operator)))))))

================================================================================
import: pattern/type
================================================================================

import A (pattern A, type A)

--------------------------------------------------------------------------------

(haskell
  (imports
    (import
      (module
        (module_id))
      (import_list
        (import_name
          (namespace)
          (name))
        (import_name
          (namespace)
          (name))))))

================================================================================
import: trailing comma
================================================================================

import A (A,)

--------------------------------------------------------------------------------

(haskell
  (imports
    (import
      (module
        (module_id))
      (import_list
        (import_name
          (name))))))

================================================================================
import: type operator with namespace
================================================================================

import A (type (++)(..))

--------------------------------------------------------------------------------

(haskell
  (imports
    (import
      (module
        (module_id))
      (import_list
        (import_name
          (namespace)
          (prefix_id
            (operator))
          (children
            (all_names)))))))

================================================================================
import: namespace for type child
================================================================================

import A (A (type A, A, ..))

--------------------------------------------------------------------------------

(haskell
  (imports
    (import
      (module
        (module_id))
      (import_list
        (import_name
          (name)
          (children
            (associated_type
              (name))
            (constructor)
            (all_names)))))))

================================================================================
import: partially typed import before the end of the block
================================================================================

import A
impo
import A

--------------------------------------------------------------------------------

(haskell
  (imports
    (import
      (module
        (module_id))))
  (declarations
    (top_splice
      (variable))
    (import
      (module
        (module_id)))))
