 
 	public init(arrayLiteral elements: T...) {
 		self.init(elements)
+	}
+
+
+	// MARK: CollectionType
+
+	public var startIndex: StreamIndex<T> {
+		return StreamIndex(stream: self, index: isEmpty ? -1 : 0)
+	}
+
+	public var endIndex: StreamIndex<T> {
+		return StreamIndex(stream: nil, index: -1)
+	}
+
+	public subscript (index: StreamIndex<T>) -> T {
+		return index.stream.first!
 	}
 
 

	}


	// MARK: Cases

	/// A `Stream` of a `T` and the lazily memoized rest of the `Stream`.

//  Copyright (c) 2014 Rob Rix. All rights reserved.

/// An iterable stream.
public enum Stream<T>: ArrayLiteralConvertible, CollectionType, NilLiteralConvertible, Printable {

	// MARK: Constructors

