Module docstring
{"# Typeclasses for commuting heterogeneous operations
The three classes in this file are for two-argument functions where one input is of type α,
the output is of type β and the other input is of type α or β.
They express the property that permuting arguments of type α does not change the result.
Main definitions
IsSymmOp: forop : α → α → β,op a b = op b a.LeftCommutative: forop : α → β → β,op a₁ (op a₂ b) = op a₂ (op a₁ b).RightCommutative: forop : β → α → β,op (op b a₁) a₂ = op (op b a₂) a₁. "}