type ('input, 'result) t = 'input list -> ('result * 'input list) list
val read : ('input, 'result) t -> 'input list -> ('result * 'input list) list
val failure : ('input, 'fail) t
val don't_read : 'result -> ('input,'result) t
val read_this : ('input -> bool) -> ('input,'input) t
val choose : ('input, 'res) t -> ('input, 'res) t -> ('input, 'res) t
val apply : ('read -> 'result) -> ('input, 'read) t -> ('input, 'result) t
val combine : ('input,'tmp -> 'res) t -> ('input, 'tmp) t -> ('input, 'res) t
val reject : ('input,'fail) t -> ('input,'success) t -> ('input,'success) t
val filter : ('result -> bool) -> ('input,'result) t -> ('input,'result) t
val keep_highest_score : ('result -> 'input list -> int) -> ('input,'result) t -> ('input,'result) t
val read_sequence : ('input,'result) t -> ('input, 'result list) t
val read_strict_sequence : ('input,'result) t -> ('input, 'result list) t
module Infix : sig
val (-->) : ('input,'tmp -> 'res) t -> ('input, 'tmp) t -> ('input, 'res) t
val (<|>) : ('input, 'res) t -> ('input, 'res) t -> ('input, 'res) t
val ( *>> ) : ('read -> 'result) -> ('input, 'read) t -> ('input, 'result) t
val (-!-) : ('input,'fail) t -> ('input,'success) t -> ('input,'success) t
end