================================================================================
import: single-segment module plain
================================================================================

module A where

import A

---

(haskell (module) (where) (import (module)))

================================================================================
import: empty single-segment module
================================================================================

import A ()

---

(haskell (import (module) (import_list)))

================================================================================
import: single-segment module with alias
================================================================================

import A as A

---

(haskell (import (module) (module)))

================================================================================
import: multi-segment module
================================================================================

import A.A

---

(haskell (import (qualified_module (module) (module))))

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

import Aaa.A (aa)

---

(haskell (import (qualified_module (module) (module)) (import_list (import_item (variable)))))

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

import Aaa.A (A)

---

(haskell (import (qualified_module (module) (module)) (import_list (import_item (type)))))

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

import Aaa.A (A(A))

---

(haskell
 (import
  (qualified_module (module) (module))
  (import_list (import_item (type) (import_con_names (constructor))))))

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

import Aaa.A (A(aa))

---

(haskell
 (import
  (qualified_module (module) (module))
  (import_list (import_item (type) (import_con_names (variable))))))

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

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

---

(haskell
 (import
  (qualified_module (module) (module))
  (import_list (import_item (type) (import_con_names (operator))))))

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

import Aaa.A (A(..))

---

(haskell
 (import
  (qualified_module (module) (module))
  (import_list (import_item (type) (import_con_names (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
 (import (qualified_module (module) (module)))
 (import (module) (import_list))
 (import (qualified_module (module) (module)) (import_list (import_item (variable))))
 (import (qualified_module (module) (module)) (import_list (import_item (variable))))
 (import
  (qualified_module (module) (module))
  (import_list (import_item (type)) (comma) (import_item (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 ()
import qualified Aaa.A as A
import qualified Aaa.A as Aaa.A
import qualified Aaa.A as A hiding (a)

---

(haskell
 (module)
 (where)
 (import (qualified_module (module) (module)) (module))
 (import
  (qualified_module (module) (module))
  (module)
  (import_list
   (import_item (type) (import_con_names (constructor) (comma) (variable)))
   (comma)
   (import_item (variable))))
 (import (module) (module) (import_list))
 (import (qualified_module (module) (module)) (module))
 (import (qualified_module (module) (module)) (qualified_module (module) (module)))
 (import (qualified_module (module) (module)) (module) (import_list (import_item (variable)))))

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

import Aaa.Aa (Aa#, aa#)

---

(haskell
 (import
  (qualified_module (module) (module))
  (import_list (import_item (type)) (comma) (import_item (variable)))))

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

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

---

(haskell
 (import (import_package) (qualified_module (module) (module)))
 (import
  (import_package)
  (qualified_module (module) (module))
  (module)
  (import_list (import_item (type) (import_con_names (variable))))))

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

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

---

(haskell (import (module) (import_list (import_item (constructor_operator) (import_con_names (constructor_operator))))))

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

import A ((<=<))

---

(haskell (import (module) (import_list (import_item (type_operator)))))

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

import A (pattern A, type A)

---

(haskell
 (import
  (module)
  (import_list
   (import_item (namespace) (type))
   (comma)
   (import_item (namespace) (type)))))

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

import A (A,)

---

(haskell (import (module) (import_list (import_item (type)) (comma))))

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

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

---

(haskell (import (module) (import_list (import_item (namespace) (type_operator) (import_con_names (all_names))))))
