===============================
Quasi Quotation
===============================

[|example|]
[e|example|]
[p|example|]
[t|example|]
[d|example|]
[str|example|]

[ | example| ]
[ e| example| ]
[ p| example| ]
[ t| example| ]
[ d| example| ]
[ str| example| ]

[ | example |  ]
[ e | example |  ]
[ p | example |  ]
[ t | example |  ]
[ d | example |  ]
[ str | example |  ]
[str|integer,double,varchar,boolean,date,money,enum
    |13,3.14159,testing!,false,1900-01-01,$3.99,foo
    |12,0.1,a string,true,1929-10-01,12,bar
    |]

---

(module
  (quasi_quotation
    (quasi_quotation_expression_body))
  (quasi_quotation
    (quasi_quotation_expression)
    (quasi_quotation_expression_body))
  (quasi_quotation
    (quasi_quotation_pattern)
    (quasi_quotation_expression_body))
  (quasi_quotation
    (quasi_quotation_type)
    (quasi_quotation_expression_body))
  (quasi_quotation
    (quasi_quotation_declaration)
    (quasi_quotation_expression_body))
  (quasi_quotation
    (quasi_quotation_quoter)
    (quasi_quotation_expression_body))

  (quasi_quotation
    (quasi_quotation_expression_body))
  (quasi_quotation
    (quasi_quotation_expression)
    (quasi_quotation_expression_body))
  (quasi_quotation
    (quasi_quotation_pattern)
    (quasi_quotation_expression_body))
  (quasi_quotation
    (quasi_quotation_type)
    (quasi_quotation_expression_body))
  (quasi_quotation
    (quasi_quotation_declaration)
    (quasi_quotation_expression_body))
  (quasi_quotation
    (quasi_quotation_quoter)
    (quasi_quotation_expression_body))

  (quasi_quotation
    (quasi_quotation_expression_body))
  (quasi_quotation
    (quasi_quotation_expression)
    (quasi_quotation_expression_body))
  (quasi_quotation
    (quasi_quotation_pattern)
    (quasi_quotation_expression_body))
  (quasi_quotation
    (quasi_quotation_type)
    (quasi_quotation_expression_body))
  (quasi_quotation
    (quasi_quotation_declaration)
    (quasi_quotation_expression_body))
  (quasi_quotation
    (quasi_quotation_quoter)
    (quasi_quotation_expression_body))
  (quasi_quotation
    (quasi_quotation_quoter)
    (quasi_quotation_expression_body)))

===============================
Multi-Line Quasi Quotation
===============================

[ | [{ "ret_setof_integers": 1 },
     { "ret_setof_integers": 2 },
     { "ret_setof_integers": 3 }] | ]

[|
  [
    { "ret_setof_integers": 1 },
    { "ret_setof_integers": 2 },
    { "ret_setof_integers": 3 }
  ]
|]

---

(module
  (quasi_quotation
    (quasi_quotation_expression_body))

  (quasi_quotation
    (quasi_quotation_expression_body)))

===============================
Infix Operator Application Quasi Quotation
===============================

f = [|a|] `b` c

---

(module
  (function_declaration
    (variable_identifier)
    (function_body
      (infix_operator_application
        (quasi_quotation
          (quasi_quotation_expression_body))
        (variable_operator (infix_variable_identifier))
        (variable_identifier)))))

===============================
Splices
===============================

f = $x
f = $(a . b $ c)
$(makeEff ''Embedded)

---

(module
  (function_declaration
    (variable_identifier)
    (function_body
      (splice (variable_identifier))))
  (function_declaration
    (variable_identifier)
    (function_body
      (splice
        (parenthesized_expression
          (infix_operator_application
            (variable_identifier)
            (variable_operator (variable_symbol))
            (infix_operator_application
              (variable_identifier)
              (variable_operator (variable_symbol))
              (variable_identifier)))))))
  (splice
    (parenthesized_expression
      (function_application
        (variable_identifier)
        (quoted_name
          (quoted_name (type_constructor_identifier)))))))
