 		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
+		}
+	}
+}

	///		might not be. Check the documentation of the type for examples.
	public var value: Wrapped {
		get { return readSync { _value } }
		set { _lock.sync { _value = newValue } }
	}

	/// Execute the given function within a thread-safe context that has

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

