     :param: separator Separator to join the array elements
     :returns: Joined string
 */
-public func * (array: Array<String>, separator: String) -> String {
+public func * (array: [String], separator: String) -> String {
     return array.implode(separator)!
 }

/**
    Remove an element from the array
*/
public func - <T: Equatable> (first: Array<T>, second: T) -> Array<T> {
    return first - [second]
}

/**
    Difference operator
*/
public func - <T: Equatable> (first: Array<T>, second: Array<T>) -> Array<T> {
    return first.difference(second)
}

/**
    Intersection operator
*/
public func & <T: Equatable> (first: Array<T>, second: Array<T>) -> Array<T> {
    return first.intersection(second)
}

/**
    Union operator
*/
public func | <T: Equatable> (first: Array<T>, second: Array<T>) -> Array<T> {
    return first.union(second)
}
/**

    :param: n How many times the array must be repeated
    :returns: Array of repeated values
*/
public func * <ItemType> (array: [ItemType], n: Int) -> [ItemType] {

    var result = [ItemType]()

    (0..<n).times {
        result += array
