diff --git a/src/DomainParser.purs b/src/DomainParser.purs index 75640e5..0c8ec43 100644 --- a/src/DomainParser.purs +++ b/src/DomainParser.purs @@ -34,11 +34,15 @@ domain = PC.try (string " ") <|> sub_eof sub_eof :: Parser String String sub_eof = do sub <- subdomain - PC.optional (char '.') + maybe_final_point <- PC.optionMaybe (char '.') eof - if S.length sub > 255 - then fail $ "domain length is > 255 bytes (" <> show (S.length sub) <> ")" - else pure sub + let parsed_domain = did_we_parsed_the_final_point maybe_final_point sub + if S.length parsed_domain > 255 + then fail $ "domain length is > 255 bytes (" <> show (S.length parsed_domain) <> ")" + else pure parsed_domain + where + did_we_parsed_the_final_point Nothing sub = sub + did_we_parsed_the_final_point (Just _) sub = sub <> "." -- From RFC 1035: ::=