module Syntax.Infix where open import Sets.Enumerated using (Bool; true; false)
Consider this definition:
data BinTree' : Set where x : BinTree' _+_ : BinTree' → BinTree' → BinTree'
There one can note that it basically yields the following:
BinTree' : Set
x : BinTree'
x + x : BinTree'
(x + x) + x : BinTree'
x + (x + x) : BinTree'
(x + x) + (x + x) : BinTree'
...
Underscores in names — like _+_ above — are placeholders for operands.
One can also give the precedence with infix, (non-associative), infixl (left-associative) or infixr (right-associative).
For example the single line below:
infixr 3 _+_
yields the following:
BinTree' : Set
x : BinTree'
x + x : BinTree'
(x + x) + x : BinTree'
x + x + x : BinTree'
(x + x) + x + x : BinTree'
...
(So, now _+_ has the right precedence, and it became right-associative.)