foo

foo

---

Foo

Foo

---

:foo

:foo

---

{ foo, Foo, :foo }

{ foo
  Foo
  :foo }

---

f(g(), h(Bar), Baz)

(f
  (g)
  (h
    Bar)
  Baz)

---

f(g(x)(y)())

(f
  (((g
    x)
    y)))

---

f(x) foo g(y)

(foo
  (f
    x)
  (g
    y))

---

(a * b) + (c * d)

(+
  (*
    a
    b)
  (*
    c
    d))

---

if (x == y) do: {
    foo()
} else: {
  Bar
}

(if
  (==
    x
    y)
  ([]
    ([]
      "do"
      { (foo) })
    ([]
      "else"
      { Bar })))

---

if (x == y) do: (foo [Bar] baz: Qux) else: Bar

(if
  (==
    x
    y)
  ([]
    ([]
      "do"
      (foo
        ([]
          Bar)
        ([]
          ([]
            "baz"
            Qux))))
    ([]
      "else"
      Bar)))

---

foo = Foo
:id = (:x => { x })
:x = id(id(foo))

(=
  foo
  Foo)
(=
  :id
  (=>
    :x
    { x }))
(=
  :x
  (id
    (id
      foo)))

---

:f(:x, :y) = {
  match (Pair(x, y)) with: [
    Pair(:x, :x) => { x }
    Pair(:x, :y) => { Mismatch }
    :x => { InvalidPair(x) }
  ]
}

(=
  (:f
    :x
    :y)
  { (match
      (Pair
        x
        y)
      ([]
        ([]
          "with"
          ([]
            (=>
              (Pair
                :x
                :x)
              { x })
            (=>
              (Pair
                :x
                :y)
              { Mismatch })
            (=>
              :x
              { (InvalidPair
                  x) }))))) })

---

if (x == y) do: { print(Equal) } else: { print(NotEqual) }
if (x == Foo) do: Pair(x, x) else: Error

(if
  (==
    x
    y)
  ([]
    ([]
      "do"
      { (print
          Equal) })
    ([]
      "else"
      { (print
          NotEqual) })))
(if
  (==
    x
    Foo)
  ([]
    ([]
      "do"
      (Pair
        x
        x))
    ([]
      "else"
      Error)))

---

// Foo
Foo(Bar)// this is a comment // comment
Baz(Qux)//

(Foo
  Bar)
(Baz
  Qux)

---

Foo("bar")

(Foo
  "bar")

---

Foo(##"foo"bar"##)

(Foo
  "foo"bar")

---

X + Y + Z

(+
  (+
    X
    Y)
  Z)

---

foo: bar

([]
  "foo"
  bar)

---

[foo: bar, baz: qux]

([]
  ([]
    "foo"
    bar)
  ([]
    "baz"
    qux))
