 
 /// A namespace for logging event types.
 public enum LoggingEvent {
-	public enum Signal: String {
+	public enum Signal: String, CaseIterable {
 		case value, completed, failed, terminated, disposed, interrupted
 
-		public static let allEvents: Set<Signal> = [
-			.value, .completed, .failed, .terminated, .disposed, .interrupted,
-		]
+		@available(*, deprecated, message:"Use `allCases` instead.")
+		public static var allEvents: Set<Signal> { Set(allCases) }
 	}
 
-	public enum SignalProducer: String {
+	public enum SignalProducer: String, CaseIterable {
 		case starting, started, value, completed, failed, terminated, disposed, interrupted
 
-		public static let allEvents: Set<SignalProducer> = [
-			.starting, .started, .value, .completed, .failed, .terminated, .disposed, .interrupted,
-		]
+		@available(*, deprecated, message:"Use `allCases` instead.")
+		public static var allEvents: Set<SignalProducer> { Set(allCases) }
 	}
 }
 

	///
	/// - returns: Signal producer that, when started, logs the fired events.
	public func logEvents(identifier: String = "",
	                      events: Set<LoggingEvent.SignalProducer> = LoggingEvent.SignalProducer.allEvents,
	                      fileName: String = #file,
	                      functionName: String = #function,
	                      lineNumber: Int = #line,

	///   - logger: Logger that logs the events.
	///
	/// - returns: Signal that, when observed, logs the fired events.
	public func logEvents(identifier: String = "", events: Set<LoggingEvent.Signal> = Set(LoggingEvent.Signal.allCases), fileName: String = #file, functionName: String = #function, lineNumber: Int = #line, logger: @escaping EventLogger = defaultEventLog) -> Signal<Value, Error> {
		let logContext = LogContext(events: events,
		                            identifier: identifier,
		                            fileName: fileName,
