     }
 }
 
-public func truthy(item: AnyObject?) -> Bool {
+public func truthy<T>(item: T) -> Bool {
     if let item = item as? Truthy {
         return item.truthy
     }

            return false
        }
    }

    return true
}


    }

    return false
}

public extension Array {
    func all(@noescape where predicate: Generator.Element throws -> Bool = truthy) rethrows -> Bool {
        for element in self {
            guard try predicate(element) else { return false }
        }
        return true
    }

    func any(@noescape where predicate: Generator.Element throws -> Bool = truthy) rethrows -> Bool {
        for element in self {
            if let result = try? predicate(element) where result {
                return true
            }
        }
        return false
    }
}