<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def rows_from_csv(filename, predicate=None, encoding='utf-8'):
 """\ Returns an iterator over all rows in the provided CSV `filename`. `filename` Absolute path to a file to read the cables from. The file must be a CSV file with the following columns: <identifier>, <creation-date>, <reference-id>, <origin>, <classification-level>, <references-to-other-cables>, <header>, <body> The delimiter must be a comma (``,``) and the content must be enclosed in double quotes (``"``). `predicate` A predicate that is invoked for each cable reference identifier. If the predicate evaluates to ``False`` the cable is ignored. By default, all cables are used. I.e. ``cables_from_csv('cables.csv', lambda r: r.startswith('09'))`` would return cables where the reference identifier starts with ``09``. `encoding` The file encoding (``UTF-8`` by default). """

    pred = predicate or bool
    with open(filename, 'rb') as f:
        for row in _UnicodeReader(f, encoding=encoding, delimiter=',', quotechar='"', escapechar='\\'):
            ident, created, reference_id, origin, classification, references, header, body = row
            if row and pred(reference_id):
                yield ident, created, reference_id, origin, classification, references, header, body