 		}
 
 
+		// MARK: Recursive properties
+
 		public var freeVariables: Set<Manifold.Variable> {
 			return analysis(
 				ifUnit: [],

		case Function(Type, Type)


		public var isUnit: Swift.Bool {
			return analysis(
				ifUnit: true,

				ifFunction: { $0.distinctTypes.union($1.distinctTypes) })
		}


		// MARK: Case analysis

		public func analysis<T>(@autoclosure #ifUnit: () -> T, @autoclosure ifBool: () -> T, ifFunction: (Type, Type) -> T) -> T {
			switch self {
