module type PARSE_COMMON = sig val is_letter : char -> bool val is_digit : char -> bool val is_whitespace : char -> bool val is_cr : char -> bool val lift_or : ('a -> bool) -> ('a -> bool) -> 'a -> bool val skip_spaces : unit Angstrom.t val take_till_crlf : string Angstrom.t val take_till_eol : string Angstrom.t end module ParseCommon : PARSE_COMMON = struct open Angstrom let is_letter = function | 'a' .. 'z' | 'A' .. 'Z' -> true | _ -> false let is_digit = function | '0' .. '9' -> true | _ -> false let is_whitespace = function | ' ' | '\t' -> true | _ -> false let is_cr = function | '\r' -> true | _ -> false let lift_or p q b = p b || q b let skip_spaces = skip_while is_whitespace let take_till_crlf = take_till is_cr <* string "\r\n" let take_till_eol = let is_eol = function | '\n' | '\r' -> true | _ -> false in take_till is_eol <* end_of_line end