 /// Returns a list of the first elements that satisfy a predicate until that predicate returns
 /// false.
 ///
-///     takeWhile([1, 2, 3, 4, 1, 2, 3, 4]){ <3 } == [1, 2]
-///     takeWhile([1,2,3]){ <9 }                  == [1, 2, 3]
-///     takeWhile([1,2,3]){ <0 }                  == []
+///     takeWhile([1, 2, 3, 4, 1, 2, 3, 4], <3)  == [1, 2]
+///     takeWhile([1,2,3], <9)                  == [1, 2, 3]
+///     takeWhile([1,2,3], <0)                  == []
 public func takeWhile<A>(list : [A], p : A -> Bool) -> [A] {
 	switch match(list) {
 	case .Nil:

/// other.
///
///     group([0, 1, 1, 2, 3, 3, 4, 5, 6, 7, 7]) == [[0], [1, 1], [2], [3, 3], [4], [5], [6], [7, 7]]
public func group<A:Equatable>(list : [A]) -> [[A]] {
	return groupBy(list, { a in { b in a == b } })
}

/// Returns a list of the first elements that do not satisfy a predicate until that predicate
/// returns false.
///
///     dropWhile([1, 2, 3, 4, 5, 1, 2, 3]){ <3 } == [3,4,5,1,2,3]
///     dropWhile([1, 2, 3]){ <9 }                == []
///     dropWhile([1, 2, 3]){ <0 }                == [1,2,3]
public func dropWhile<A>(list : [A], p : A -> Bool) -> [A] {
	switch match(list) {
	case .Nil:


/// Drops, at most, a specified number of elements from a list and returns that sublist.
///
///     drop(3,  from: [1,2]) == []
///     drop(-1, from: [1,2]) == [1,2]
///     drop(0,  from: [1,2]) == [1,2]
public func drop<A>(n : Int, from list : [A]) -> [A] {
	if n <= 0 {
		return list
