0 | module Network.URL.Internal.StringParser
 1 |
 2 | import Data.String.Parser
 3 | import Data.String
 4 | import Data.Fin
 5 | import Network.URL.Internal.Predicate
 6 |
 7 | export
 8 | letters : Parser String
 9 | letters = do
10 |   chars <- some $ letter
11 |   pure . joinBy "" . map Data.String.singleton $ chars
12 |
13 | export
14 | digits : Parser String
15 | digits = do 
16 |   ds <- some $ digit
17 |   pure . joinBy "" . map show $ ds
18 |
19 | export
20 | int : Parser Int
21 | int = do
22 |   ds <- digits
23 |   pure $ cast ds
24 |
25 | export
26 | schemeParser : Parser String
27 | schemeParser = do
28 |   head <- letter
29 |   tail <- takeWhile (anyPass [isAlphaNum, (== '+'), (== '-'), (== '.')])
30 |   pure $ singleton head ++ tail