     ///
     /// - Parameter condition: condition to evaluate each element against.
     /// - Returns: first index where the specified condition evaluates to true. (optional)
-    public func firstIndex(where condition: (Element) -> Bool) -> Int? {
+    public func firstIndex(where condition: (Element) throws -> Bool) rethrows -> Int? {
         for (index, value) in lazy.enumerated() {
-            if condition(value) { return index }
+            if try condition(value) { return index }
         }
         return nil
     }

    /// - Parameters:
    ///   - condition: condition to evaluate each element against.
    ///   - body: a closure that takes an element of the array as a parameter.
    public func forEach(where condition: (Element) -> Bool, body: (Element) -> Void) {
        for element in self where condition(element) {
            body(element)
        }
    }
	

    ///
    /// - Parameter condition: to evaluate the exclusion of an element from the array.
    /// - Returns: the array with rejected values filtered from it.
    public func reject(where condition: (Element) throws -> Bool) rethrows -> [Element] {
        return try filter { return try !condition($0) }
    }
    
    /// SwifterSwift: Get element count based on condition.
    ///
    /// - Parameter condition: condition to evaluate each element against.
    /// - Returns: number of times the condition evaluated to true.
    public func count(where condition: (Element) throws -> Bool) rethrows -> Int {
        var count = 0
        for element in self {
            if try condition(element) { count += 1 }
        }
        return count
    }
