===
infix op functional expression not parsed as such
===
x = 1 + 2
---
(unison
    (term_declaration
        (term_definition
            (wordy_id)
            (kw_equals)
            (function_application
                (nat)
                (operator)
                (nat)))))
===
[Regression] Issue 21: built-in hash without path not parsed correctly
===
x = ##Foo
---
(unison (term_declaration (term_definition (wordy_id) (kw_equals) (built_in_hash (wordy_id)))))
===
[Regression] issue 24: multiline text literal with an unescaped double quotation mark
===
> """ foo " bar """
---
(unison (watch_expression (literal_text)))
===
[Regression] Issue 30, infix ops with path in function application
===
> 1 Nat.+ 2
---
(unison (watch_expression (function_application (nat) (path) (operator) (nat))))
===
[Regression] #34 - watch expressions can be binds (term definitions, but types are not allowed as per TermParser.hs, so not term declarations)
They cannot be destructuring binds, which cannot happen at the top level. Verified via Unison LSP.
===
> z = 5
---
(unison 
    (watch_expression 
        (term_definition 
            (wordy_id) (kw_equals) (nat))))
===
[Regression] Issue 37, docblock can be anywhere an expression is
===
z = {{ test }}
---
(unison (term_declaration (term_definition (wordy_id) (kw_equals) (doc_block))))
===
[Regression] Issue 37, anonymous docblock immediately precedes term declaration
===
{{ howdy }}
x = 5
---
(unison (term_declaration
    (doc_block)
    (term_definition (wordy_id) (kw_equals) (nat))))
===
[Regression] Issue 39, Parenthesized operators in term declaration (def'n + type sig) fail
===
(Numeric.>=) : Numeric -> Numeric -> Boolean
(Numeric.>=) = todo "implement"
---
(unison (term_declaration
    (type_signature (path) (operator) (type_signature_colon) (wordy_id) (arrow_symbol) (wordy_id) (arrow_symbol) (wordy_id))
    (term_definition (path) (operator) (kw_equals) (function_application (wordy_id) (literal_text)))))