 		return self
 	}
 	
-	/// Returns the first n elements of a Stream.
+	/// Returns the first n elements of a `Stream`.
 	public func take(n : UInt) -> [T] {
 		if n == 0 {
 			return []

		return (p.cons(self.head), r)
	}
	
	/// Returns the longest prefix of values in a Stream for which a predicate holds.
	public func takeWhile(p : T -> Bool) -> [T] {
		if p(self.step().head) {
			return self.step().tail.takeWhile(p).cons(self.step().head)

		}
	}
	
	/// Returns the first element of a `Stream`.
	public var head : T {
		return self.step().head
	}
	
	/// Returns the remaining elements of a `Stream`.
	public var tail : Stream<T> {
		return self.step().tail
	}
	
	/// Returns a `Stream` of all initial segments of a `Stream`.
	public var inits : Stream<[T]> {
		return Stream<[T]> { ([], self.step().tail.inits.fmap({ $0.cons(self.step().head) })) }
	}
	
	/// Returns a `Stream` of all final segments of a `Stream`.
	public var tails : Stream<Stream<T>> {
		return Stream<Stream<T>> { (self, self.step().tail.tails) }
	}
	
	/// Returns a pair of the first n elements and the remaining eleemnts in a `Stream`.
	public func splitAt(n : UInt) -> ([T], Stream<T>) {
		if n == 0 {
			return ([], self)
