=========================================
Import Declaration
=========================================

module A where

import Maybe
import Either()

---

(module
  (module_identifier)
  (where
    (import_declaration (module_identifier))
    (import_declaration (module_identifier) (import_spec))))

=========================================
Import Declaration With Constructor Operators and Variable Operators
=========================================

module A where

import Data.Maybe (Maybe(..))
import Data.Aeson ((.:))
import Control.Comonad.Cofree ((:<))

---

(module
  (module_identifier)
  (where
    (import_declaration
      (qualified_module_identifier (module_identifier) (module_identifier))
      (import_spec
        (import (type_constructor_identifier) (all_constructors))))
    (import_declaration
      (qualified_module_identifier (module_identifier) (module_identifier))
      (import_spec (import (variable_operator (variable_symbol)))))
    (import_declaration
      (qualified_module_identifier (module_identifier) (module_identifier) (module_identifier))
      (import_spec (import (constructor_operator (constructor_symbol)))))))

=========================================
Import Declaration With Variable Identifiers
=========================================

module A where

import Data.Maybe (fromMaybe, fromJust)

---

(module
  (module_identifier)
  (where
    (import_declaration
      (qualified_module_identifier (module_identifier) (module_identifier))
      (import_spec
        (import (variable_identifier))
        (import (variable_identifier))))))

=========================================
Import Declaration With Constructor And Functions
=========================================

module A where

import Data.Maybe (Maybe(..), fromMaybe, fromJust)

---

(module
  (module_identifier)
  (where
    (import_declaration
      (qualified_module_identifier (module_identifier) (module_identifier))
      (import_spec
        (import (type_constructor_identifier) (all_constructors))
        (import (variable_identifier))
        (import (variable_identifier))))))

=========================================
Import Declaration With Qualified
=========================================

module A where

import qualified Data.Maybe
import qualified Either ()
import qualified Data.Function (fix)

---

(module
  (module_identifier)
  (where
    (qualified_import_declaration
      (qualified_module_identifier
        (module_identifier)
        (module_identifier)))
    (qualified_import_declaration
      (module_identifier)
      (import_spec))
    (qualified_import_declaration
      (qualified_module_identifier (module_identifier) (module_identifier))
      (import_spec (import (variable_identifier))))))

=========================================
Import Declaration With Qualified, As
=========================================

module A where

import qualified Data.Maybe as DM
import qualified Either as E ()
import qualified Data.Aeson as JSON
import qualified Data.Aeson as D.A

---

(module
  (module_identifier)
  (where
    (qualified_import_declaration
      (import_alias
        (qualified_module_identifier (module_identifier) (module_identifier))
        (module_identifier)))
    (qualified_import_declaration
      (import_alias
        (module_identifier)
        (module_identifier))
      (import_spec))
    (qualified_import_declaration
      (import_alias
        (qualified_module_identifier (module_identifier) (module_identifier))
        (module_identifier)))
    (qualified_import_declaration
      (import_alias
        (qualified_module_identifier (module_identifier) (module_identifier))
        (qualified_module_identifier (module_identifier) (module_identifier))))))

=========================================
Import Declaration With As, Constructor And Function
=========================================

module A where

import Data.Maybe as DM (Maybe(..), fromMaybe)

---

(module
  (module_identifier)
  (where
    (import_declaration
      (import_alias
        (qualified_module_identifier (module_identifier) (module_identifier))
        (module_identifier))
      (import_spec
        (import
          (type_constructor_identifier)
          (all_constructors))
        (import (variable_identifier))))))

=========================================
Import Declaration With Qualified, As, Constructor And Function
=========================================

module A where

import qualified Data.Maybe as M (Maybe(..), fromMaybe)

---

(module
  (module_identifier)
  (where
    (qualified_import_declaration
      (import_alias
        (qualified_module_identifier (module_identifier) (module_identifier))
        (module_identifier))
      (import_spec
        (import (type_constructor_identifier) (all_constructors))
        (import (variable_identifier))))))

=========================================
Import Declaration With Hiding, Constructor and Function
=========================================

module A where

import Data.Maybe hiding (Maybe(..), fromMaybe)

---

(module
  (module_identifier)
  (where
    (import_declaration
      (qualified_module_identifier (module_identifier) (module_identifier))
      (hidden_import_spec
        (import (type_constructor_identifier) (all_constructors))
        (import (variable_identifier))))))

=========================================
Import Declaration With Qualified, Hiding, Constructor and Function
=========================================

module A where

import qualified Data.Maybe hiding ()
import qualified Data.Either hiding (Either(..), decodeEither)
import qualified Data.Function hiding (fix)
import qualified Data.List as DL hiding (head)

---

(module
  (module_identifier)
  (where
    (qualified_import_declaration
      (qualified_module_identifier
        (module_identifier)
        (module_identifier))
      (hidden_import_spec))
    (qualified_import_declaration
      (qualified_module_identifier
        (module_identifier)
        (module_identifier))
      (hidden_import_spec
        (import (type_constructor_identifier) (all_constructors))
        (import (variable_identifier))))
    (qualified_import_declaration
      (qualified_module_identifier (module_identifier) (module_identifier))
      (hidden_import_spec
        (import (variable_identifier))))
    (qualified_import_declaration
      (import_alias
        (qualified_module_identifier (module_identifier) (module_identifier))
        (module_identifier))
      (hidden_import_spec
        (import (variable_identifier))))))

=========================================
Import Declaration With Primitive Constructor And Primitive Variable Identifiers
=========================================

import GHC.Prim (Proxy#, proxy#)

---

(module
  (import_declaration
    (qualified_module_identifier (module_identifier) (module_identifier))
    (import_spec
      (import (primitive_constructor_identifier))
      (import (primitive_variable_identifier)))))

=========================================
Imports Containing Package Qualified Imports
=========================================

import "hint" HLint.Default

---

(module
  (import_declaration
    (package_qualified_import)
    (qualified_module_identifier (module_identifier) (module_identifier))))
