(define (parse-timestamp input) (let ((units '(h m s))) (parse (bind (followed-by (sequence (map (lambda (suffix p) (maybe (sequence* ((number (as-string (one-or-more (in char-set:digit)))) (_ (char-seq (symbol->string suffix)))) (result (* (string->number number) (expt 60 p)))) 0)) units (reverse (iota (length units))))) end-of-input) (o result (cut fold + 0 <>))) input)))