     ///
     /// - Parameter condition: condition to evaluate each element against.
     /// - Returns: all indices where the specified condition evaluates to true. (optional)
-    public func indices(where condition: (Element) -> Bool) -> [Int]? {
+    public func indices(where condition: (Element) throws -> Bool) rethrows -> [Int]? {
         var indicies: [Int] = []
         for (index, value) in lazy.enumerated() {
-            if condition(value) { indicies.append(index) }
+            if try condition(value) { indicies.append(index) }
         }
         return indicies.isEmpty ? nil : indicies
     }

    ///
    /// - Parameter condition: condition to evaluate each element against.
    /// - Returns: All elements up until condition evaluates to false.
    public func take(while condition: (Element) -> Bool) -> [Element] {
        for (index, element) in lazy.enumerated() {
            if !condition(element) {
                return Array(self[startIndex..<index])
            }
        }

    ///
    /// - 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) throws -> Bool) rethrows -> Int? {
        for (index, value) in lazy.enumerated() {
            if try condition(value) { return index }
        }
        return nil
    }
