In Haskell, ci sono alcune diverse opzioni per "analizzare il testo". Conosco Alex e amp; Happy , Parsec e Attoparsec . Probabilmente alcuni altri.
Mi piacerebbe mettere insieme una libreria in cui l'utente può inserire pezzi di un URL (schema ad esempio HTTP, nome host, nome utente, porta, percorso, query, ecc.) Mi piacerebbe convalidare i pezzi in base al ABNF specificato in RFC 3986 .
In altre parole, mi piacerebbe mettere insieme una serie di funzioni come:
validateScheme :: String -> Bool
validateUsername :: String -> Bool
validatePassword :: String -> Bool
validateAuthority :: String -> Bool
validatePath :: String -> Bool
validateQuery :: String -> Bool
Qual è lo strumento più appropriato da usare per scrivere queste funzioni?
Le espressioni regolari di Alex sono molto concise, ma sono un tokenizer e non ti permettono in modo diretto di analizzare le regole specifiche, quindi non è esattamente quello che sto cercando, ma forse si può essere indotti a farlo facilmente.
Ho scritto codice Parsec che fa parte di quanto sopra, ma sembra molto diverso dall'ABNF originale e inutilmente lungo.
Quindi, ci deve essere un modo più semplice e / o più appropriato. Raccomandazioni?