 C: <@ apply-parser ( parser quot -- parser )
 
 M: apply-parser parse ( input parser -- result )
-    #! Calls the parser on the input. For each successfull
+    #! Calls the parser on the input. For each successful
     #! parse the quot is call with the parse result on the stack.
     #! The result of that quotation then becomes the new parse result.
     #! This allows modification of parse tree results (like

    over empty? [
        2drop nil
    ] [
        satisfy-parser-quot >r unclip-slice dup r> call [
            swap <parse-result> 1list
        ] [
            2drop nil
        ] if
    ] if ;

LAZY: any-char-parser ( -- parser )


C: <parse-result> parse-result

: <parse-results> ( parsed unparsed -- list )
    <parse-result> 1list ;

: parse-result-parsed-slice ( parse-result -- slice )
    dup parse-result-parsed empty? [
        parse-result-unparsed 0 0 rot <slice>
