     /// SwifterSwift: Keep elements of Array while condition is true.
     ///
     /// - Parameter condition: condition to evaluate each element against.
-    public mutating func keep(while condition: (Element) -> Bool) {
+    public mutating func keep(while condition: (Element) throws -> Bool) rethrows {
         for (index, element) in lazy.enumerated() {
-            if !condition(element) {
+            if try !condition(element) {
                 self = Array(self[startIndex..<index])
                 break
             }

    ///
    /// - Parameter condition: condition to eveluate each element against.
    /// - Returns: All elements after the condition evaluates to false.
    public func skip(while condition: (Element) -> Bool) -> [Element] {
        for (index, element) in lazy.enumerated() {
            if !condition(element) {
                return Array(self[index..<endIndex])
            }
        }

    ///   - initial: initial value.
    ///   - next: closure that combines the accumulating value and next element of the array.
    /// - Returns: an array of the final accumulated value and each interim combination.
    public func accumulate<U>(initial: U, next: (U, Element) throws -> U) rethrows -> [U] {
        var runningTotal = initial
        return try map { element in
            runningTotal = try next(runningTotal, element)
            return runningTotal
        }
    }
