Mixfix

<< this needs to be completed>>

If a name of a function contains one or more underscores (_) it can be used as an operator with the arguments going where the underscores are. Consequently, the function _+_ can be used as an infix operator writing n + m for _+_ n m. There are (almost) no restrictions on what symbols are allowed as operator names, for instance we can define

  _and_ : Bool -> Bool -> Bool
  true and x = x
  false and _ = false
  if_then_else_ : {A : Set} -> Bool -> A -> A -> A
  if true then x else y = x
  if false then x else y = y

Such a function can be called using the arguments in their mixfix places, or using prefix notation, so

  (if_then_else_) c x y

is equivalent to

  if x then x else y