 }
 
 extension List : Pointed {
-	public static func pure(a: A) -> List<A> {
+	public typealias A = Element
+	public static func pure(a : A) -> List<Element> {
 		return List(a, [])
 	}
 }
 
 extension List : Applicative {
-	public typealias FA = List<A>
+	public typealias FA = List<Element>
 	public typealias FAB = List<A -> B>
 
 	public func ap<B>(f : List<A -> B>) -> List<B> {

	/// Indexes into an array.
	///
	/// Indexing into the empty list will throw an exception.
	public subscript(n : UInt) -> A {
		switch self.match {
		case .Nil:
			return error("Cannot extract an element from an empty list.")

	}
	
	/// Returns a list of the longest prefix of elements satisfying a predicate.
	public func takeWhile(p : Element -> Bool) -> List<Element> {
		switch self.match {
		case .Nil:
			return []
