 	///		to the wrapped value can happen concurrently or not. Defaults to
 	///		`true`.
 	public init(_ value: Wrapped, allowConcurrentReads: Bool = true) {
-		self._lock = allowConcurrentReads ? ReadWriteLock() : MutexLock()
+		self._lock = allowConcurrentReads ? .concurrent(ReadWriteLock()) : .synchronous(MutexLock())
 		self._value = value
 	}
 

	///		to the wrapped value.
	/// - parameter value: The current wrapped value. Can be updated directly.
	public func atomicallyUpdate(_ update: (_ value: inout Wrapped) throws -> Void) rethrows {
		try _lock.sync({ try update(&_value) })
	}
}


		return map({ transform($0).value })
	}
}

// MARK: -

private enum _Lock {
	case synchronous(Lock)
	case concurrent(ConcurrentLock)
	var lock: Lock {
		switch self {
		case .synchronous(let lock): return lock
		case .concurrent(let lock): return lock
		}
	}
}
