hackage-server-0.4: Distribution/Server/Util/Parse.hs
-- | Parsing and UTF8 utilities
module Distribution.Server.Util.Parse (
int, unpackUTF8, packUTF8
) where
import qualified Distribution.Compat.ReadP as Parse
import qualified Data.Char as Char
import Data.ByteString.Lazy (ByteString)
import qualified Data.Text.Lazy as Text
import qualified Data.Text.Lazy.Encoding as Text
import qualified Data.Text.Encoding.Error as Text
-- | Parse a positive integer. No leading @0@'s allowed.
--
int :: Parse.ReadP r Int
int = do
first <- Parse.satisfy Char.isDigit
if first == '0'
then return 0
else do rest <- Parse.munch Char.isDigit
return (read (first : rest))
-- | Ignore a Unicode byte order mark (BOM) at the beginning of the input
--
-- (Also in Distribution.Simple.Utils, but not exported)
ignoreBOM :: String -> String
ignoreBOM ('\xFEFF':string) = string
ignoreBOM string = string
unpackUTF8 :: ByteString -> String
unpackUTF8 = ignoreBOM . Text.unpack . Text.decodeUtf8With Text.lenientDecode
packUTF8 :: String -> ByteString
packUTF8 = Text.encodeUtf8 . Text.pack