 			n.digits(alphabet.characters.count).lazy.map { String(atModular(alphabet.characters, offset: $0)) }.joinWithSeparator("")
 		}
 		let alphabet = "abcdefghijklmnopqrstuvwxyz"
-		return cata {
+		return para {
 			switch $0 {
 			case .Unit:
 				return "()"

					ifGlobal: id,
					ifLocal: { renderNumerals($0, alphabet) })

			case let .Application(a, b):
				return "(\(a) \(b))"

			case let .Lambda(variable, type, body):
				return variable < 0
					? "\(type) → \(body)"
					: "λ \(renderNumerals(variable, alphabet)) : \(type) . \(body)"

			case let .Projection(term, branch):
				return "\(term).\(branch ? 1 : 0)"

			case let .Product(a, b):
				return "(\(a) × \(b))"

			case .BooleanType:

			case let .Boolean(b):
				return String(b)

			case let .If((_, condition), (_, then), (_, `else`)):
				return "if \(condition) then \(then) else \(`else`)"

			case let .Annotation((_, term), (_, type)):
				return "(\(term) : \(type))"
			}
		} (self)
