=====================================
module statement exposing all
=====================================

module Main exposing (..)

---

(file
  (module_declaration (module)
    (upper_case_qid (upper_case_identifier)) (exposing_list (exposing) (left_parenthesis) (double_dot) (right_parenthesis))
  )

)
=====================================
module statement sub dir exposing all
=====================================

module Page.View exposing (..)

---

(file
  (module_declaration (module)
    (upper_case_qid (upper_case_identifier) (dot) (upper_case_identifier)) (exposing_list (exposing) (left_parenthesis) (double_dot) (right_parenthesis))
  )

)

=====================================
module statement exposing single function
=====================================

module Main exposing (view)

---

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

)

=====================================
module statement exposing multiple functions
=====================================

module Main exposing (main, update, view)

---

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

)

=====================================
module statement exposing type with all constructors and functions
=====================================

module Main exposing (Msg(..), main, update, view)

---

(file
  (module_declaration (module)
    (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))) (comma)
                                                                                           (exposed_value (lower_case_identifier)) (comma)
                                                                                           (exposed_value (lower_case_identifier)) (comma)
                                                                                           (exposed_value (lower_case_identifier)) (right_parenthesis))
  )

)

=====================================
module statement exposing type with no constructors and functions
=====================================

module Main exposing (Msg, main, update, view)

---

(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)) (right_parenthesis))
  )

)

=====================================
module statement exposing type with all constructors and functions
=====================================

module Main exposing (Msg(..), main, update, view)

---

(file
  (module_declaration (module)
    (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)))
      (comma)
      (exposed_value (lower_case_identifier))
      (comma)
      (exposed_value (lower_case_identifier))
      (comma)
      (exposed_value (lower_case_identifier))
      (right_parenthesis))
  )
)

=====================================
module statement exposing type with one constructors and functions - not valid in elm 0.19 - should error
=====================================

module Main exposing (Msg(One), main, update, view)

---

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

=====================================
effect module statement exposing
=====================================

effect module Task where { command = MyCmd } exposing
  ( Task
  , succeed, fail
  , map, map2, map3, map4, map5
  , sequence
  , andThen
  , onError, mapError
  , perform, attempt
  )
---

(file
  (module_declaration
    (effect)
    (module)
    (upper_case_qid (upper_case_identifier))
    (where)
    (record_expr (left_brace) (field (lower_case_identifier) (eq) (value_expr (upper_case_qid (upper_case_identifier)))) (right_brace))
    (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))
      (comma)
      (exposed_value (lower_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))
      (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)
    )
  )

)