type S = List(Char) !!! x == "hi" x : S x = "hi" type T(a) = Unit + a * T(a) * T(a) leaf : T(a) leaf = left(unit) testT : T(N) testT = right(3, right(4, right(1, leaf, leaf), right(6, leaf, leaf)), right(9, leaf, leaf)) !!! mirror(mirror(testT)) == testT mirror : T(a) -> T(a) mirror(left(unit)) = left(unit) mirror(right(a,l,r)) = right(a, mirror(r), mirror(l))