 	}
 
 	/// Appends two lists together.
+	///
+	/// If the reciever is infinite, the result of this function will be the reciever itself.
 	public func append(rhs : List<A>) -> List<A> {
 		switch self.match() {
 		case .Nil:

		}
	}

	/// Reverse the list
	public func reverse() -> List<A> {
		return self.reduce(flip(List.cons), initial: [])
	}

	/// Given a predicate, searches the list until it find the first match, and returns that,
	/// or None if no match was found.
	public func find(pred: A -> Bool) -> Optional<A> {
		for x in self {
			if pred(x) {

	}

	/// Constructs the empty list.
	///
	/// Attempts to access the head or tail of this list in an unsafe manner will throw an exception.
	public init() {
		self.init((error("Attempted to access the head of the empty list."), error("Attempted to access the tail of the empty list.")), isEmpty: true)
	}
