 	return .single(option.defaultValue)
 }
 
+/// Attempts to parse a value for the given nullable option from the given
+/// command-line arguments.
+///
+/// Returns either a signal of one value or an error. If no value was specified
+/// on the command line, `nil` is used.
 func <|<T: ArgumentType>(arguments: [String], option: Option<T?>) -> ColdSignal<T?> {
 	var keyIndex = find(arguments, "--\(option.key)")
 	if let keyIndex = keyIndex {

	func run(arguments: [String]) -> ColdSignal<()>
}

/// Represents a record of options for a command.
protocol OptionsType {
	/// Parses a set of options from the given command-line arguments.
	///

	precedence 150
}

/// Applies `f` to the values in the given signal.
///
/// In the context of command-line option parsing, this is used to chain
/// together the parsing of multiple arguments. See OptionsType for an example.
func <*><T, U>(f: T -> U, value: ColdSignal<T>) -> ColdSignal<U> {
	return value.map(f)
}

/// Applies the functions in `f` to the values in the given signal.
///
/// In the context of command-line option parsing, this is used to chain
/// together the parsing of multiple arguments. See OptionsType for an example.
func <*><T, U>(f: ColdSignal<(T -> U)>, value: ColdSignal<T>) -> ColdSignal<U> {
	return f.combineLatestWith(value)
		.map { (f, value) in f(value) }
}

/// Attempts to parse a value for the given option from the given command-line
/// arguments.
///
/// Returns either a signal of one value or an error. If no value was specified
/// on the command line, the option's `defaultValue` is used.
func <|<T: ArgumentType>(arguments: [String], option: Option<T>) -> ColdSignal<T> {
	var keyIndex = find(arguments, "--\(option.key)")
	if let keyIndex = keyIndex {
