]> gitweb @ CieloNegro.org - Lucu.git/blob - Data/URI/Internal.hs
Parser and co-parser for Data.URI.Scheme
[Lucu.git] / Data / URI / Internal.hs
1 {-# LANGUAGE
2     UnicodeSyntax
3   #-}
4 module Data.URI.Internal
5     ( finishOff
6     , parseAttempt
7     , parseAttempt'
8     )
9     where
10 import Control.Applicative
11 import Control.Exception.Base
12 import Control.Monad.Unicode
13 import Data.Ascii (Ascii)
14 import qualified Data.Ascii as A
15 import Data.Attempt
16 import Data.Attoparsec.Char8
17 import Data.ByteString (ByteString)
18 import Prelude.Unicode
19
20 finishOff ∷ Parser α → Parser α
21 {-# INLINE finishOff #-}
22 finishOff = ((endOfInput *>) ∘ return =≪)
23
24 parseAttempt ∷ Exception e
25              ⇒ (String → e)
26              → Parser α
27              → ByteString
28              → Attempt α
29 {-# INLINEABLE parseAttempt #-}
30 parseAttempt f p bs
31     = case parseOnly (finishOff p) bs of
32         Right α → Success α
33         Left  e → Failure $ f e
34
35 parseAttempt' ∷ Parser α → Ascii → Attempt α
36 {-# INLINE parseAttempt' #-}
37 parseAttempt' = (∘ A.toByteString) ∘ parseAttempt StringException