=====================================
Import statements
=====================================

import Browser
import Html.Events
import Html.Events.Test

---

(file
  (import_clause
    (import) (upper_case_qid (upper_case_identifier))
  )

  (import_clause
    (import) (upper_case_qid (upper_case_identifier) (dot) (upper_case_identifier))
  )

  (import_clause
    (import) (upper_case_qid (upper_case_identifier) (dot) (upper_case_identifier) (dot) (upper_case_identifier))
  )

)

=====================================
Import statements with exposing
=====================================

import Html.Events exposing (onClick)
import Html.Events exposing (..)
import Html.Events exposing (onClick, onDoubleClick)
import Html exposing (Html, button, div, text)

---

(file
  (import_clause
    (import) (upper_case_qid (upper_case_identifier) (dot) (upper_case_identifier)) (exposing_list (exposing) (left_parenthesis) (exposed_value (lower_case_identifier)) (right_parenthesis)
    )
  )

  (import_clause
    (import) (upper_case_qid (upper_case_identifier) (dot) (upper_case_identifier)) (exposing_list (exposing) (left_parenthesis) (double_dot) (right_parenthesis)
    )
  )

  (import_clause
    (import) (upper_case_qid (upper_case_identifier) (dot) (upper_case_identifier)) (exposing_list (exposing) (left_parenthesis) (exposed_value (lower_case_identifier)) (comma) (exposed_value (lower_case_identifier)) (right_parenthesis)
     )
  )

  (import_clause
    (import) (upper_case_qid (upper_case_identifier)) (exposing_list (exposing) (left_parenthesis) (exposed_type (upper_case_identifier)) (comma)
                                   (exposed_value (lower_case_identifier))  (comma)
                                   (exposed_value (lower_case_identifier))  (comma)
                                   (exposed_value (lower_case_identifier)) (right_parenthesis)
    )
  )

)

=====================================
Import statements prefixed with module and docs
=====================================

module Asset exposing (Image, defaultAvatar, error, loading, src)

{-| Assets, such as images, videos, and audio. (We only have images for now.)

We should never expose asset URLs directly; this module should be in charge of
all of them. One source of truth!

-}

import Html exposing (Attribute, Html)
import Html.Attributes as Attr



---

(file
  (module_declaration (module) (upper_case_qid (upper_case_identifier))
    (exposing_list (exposing) (left_parenthesis) (exposed_type (upper_case_identifier))
      (comma) (exposed_value (lower_case_identifier)) (comma) (exposed_value (lower_case_identifier))
      (comma) (exposed_value (lower_case_identifier)) (comma) (exposed_value (lower_case_identifier))
    (right_parenthesis)))


  (block_comment)

  (import_clause
    (import) (upper_case_qid (upper_case_identifier)) (exposing_list (exposing) (left_parenthesis) (exposed_type (upper_case_identifier)) (comma) (exposed_type (upper_case_identifier)) (right_parenthesis)
    )
  )

  (import_clause
    (import) (upper_case_qid (upper_case_identifier) (dot) (upper_case_identifier)) (as_clause (as) (upper_case_identifier))
  )

)

=====================================
Import statements with as clause
=====================================

import Dict.Any as AnyDict exposing (AnyDict)
import Remedy.ScreenId as ScreenId exposing (ScreenId)
import Remedy.ScreenList as ScreenList

---

(file
  (import_clause
    (import) (upper_case_qid (upper_case_identifier) (dot) (upper_case_identifier)) (as_clause (as) (upper_case_identifier)) (exposing_list (exposing) (left_parenthesis) (exposed_type (upper_case_identifier)) (right_parenthesis)
    )
  )

  (import_clause
    (import) (upper_case_qid (upper_case_identifier) (dot) (upper_case_identifier)) (as_clause (as) (upper_case_identifier)) (exposing_list (exposing) (left_parenthesis) (exposed_type (upper_case_identifier)) (right_parenthesis)
    )
  )

  (import_clause
    (import) (upper_case_qid (upper_case_identifier) (dot) (upper_case_identifier)) (as_clause (as) (upper_case_identifier)
    )
  )

)

=====================================
Import statements with operator statement
=====================================

import Url.Parser as Parser exposing ((</>), Parser, oneOf, s, string)

---

(file
  (import_clause
    (import)
    (upper_case_qid (upper_case_identifier) (dot) (upper_case_identifier))
    (as_clause (as) (upper_case_identifier))
    (exposing_list
      (exposing)
      (left_parenthesis)
      (exposed_operator
        (left_parenthesis)
        (operator_identifier)
        (right_parenthesis)
      )
      (comma)
      (exposed_type (upper_case_identifier))
      (comma)
      (exposed_value (lower_case_identifier))
      (comma)
      (exposed_value (lower_case_identifier))
      (comma)
      (exposed_value (lower_case_identifier))
      (right_parenthesis)
    )
  )

)

=====================================
Import statements with type trying to expose all constructors
=====================================

import Element exposing (DeviceClass(..))

---

(file
  (import_clause
    (import)
    (upper_case_qid (upper_case_identifier))
    (exposing_list
      (exposing)
      (left_parenthesis)
      (exposed_type (upper_case_identifier) (exposed_union_constructors (left_parenthesis) (double_dot) (right_parenthesis)))
      (right_parenthesis)
    )
  )
)

=====================================
Import statements with type trying to expose single constructor - should fail
=====================================

import Element exposing (DeviceClass(Phone))

---

(file
  (import_clause
    (import)
    (upper_case_qid (upper_case_identifier))
    (exposing_list
      (exposing)
      (left_parenthesis)
      (exposed_type (upper_case_identifier))
      (ERROR (left_parenthesis) (upper_case_identifier) (right_parenthesis))
      (right_parenthesis)
    )
  )
)
