If so, then the complexity of documentation and understanding of `parseLog` is pretty high. The caller needs to not only know the different conditions (e.g., `ParseError`), but also the available recovery strategies for those conditions (e.g., `SkipEntry`, `FixEntry`), and further that some of those strategies require an additional caller-provided function (e.g., `askToFixEntry`) with its own separate requirements (e.g., it takes an exception and returns a line).
Why would it not be better, since there are a finite number of provided recovery strategies, to simply hide that complexity within library-provided functions? E.g.:
(defn parse-log [file] ...) ; aborts on ParseError
(defn parse-log-skip [file] ...) ; skips bad lines
(defn parse-log-fix [file fix-fn] ...) ; emits (fix-fn line) for bad lines