===========================================================================================
function_without_body
===========================================================================================

||
|a, b|
|| -> Bool

---

(module
  (function (args))
  (function
    (args
      (arg (variable (identifier)))
      (arg (variable (identifier)))
    )
  )
  (function
    (args)
    output_type: (identifier)
  )
)

===========================================================================================
function_inline
===========================================================================================

|| null
|a, b, c| 1 + 2
|a: Number, b: String| -> Null null

---

(module
  (function
    (args)
    body: (null)
  )
  (function
    (args
      (arg (variable (identifier)))
      (arg (variable (identifier)))
      (arg (variable (identifier)))
    )
    body: (binary_op (number) (number))
  )
  (function
    (args
      (arg (variable (identifier) type: (identifier)))
      (arg (variable (identifier) type: (identifier)))
    )
    output_type: (identifier)
    body: (null)
  )
)

===========================================================================================
function_block
===========================================================================================

||
  true
|a, b| -> Number
  a + b

---

(module
  (function
    (args)
    body: (block (true))
  )
  (function
    (args
      (arg (variable (identifier)))
      (arg (variable (identifier)))
    )
    output_type: (identifier)
    body: (block (binary_op (identifier) (identifier)))
  )
)

===========================================================================================
function_arg_unpacking
===========================================================================================

|a, b, ...| true
|a, (b, c...)| true
|[...x, (...y)]| true

---

(module
  (function
    (args
      (arg (variable (identifier)))
      (arg (variable (identifier)))
      (arg (ellipsis))
    )
    body: (true)
  )
  (function
    (args
      (arg (variable (identifier)))
      (arg (tuple
        (arg (variable (identifier)))
        (arg (identifier) (ellipsis))
      ))
    )
    body: (true)
  )
  (function
    (args
      (arg (list
        (arg (ellipsis) (identifier))
        (arg (tuple
          (arg (ellipsis) (identifier))
        ))
      ))
    )
    body: (true)
  )
)

