Просмотр исходного кода

Export individual parsers from HaskLike

Getty Ritter 7 лет назад
Родитель
Сommit
07f31ac166
1 измененных файлов с 13 добавлено и 9 удалено
  1. 13 9
      Data/SCargot/Language/HaskLike.hs

+ 13 - 9
Data/SCargot/Language/HaskLike.hs

@@ -5,6 +5,10 @@ module Data.SCargot.Language.HaskLike
     HaskLikeAtom(..)
   , haskLikeParser
   , haskLikePrinter
+    -- * Individual Parsers
+  , parseHaskellString
+  , parseHaskellFloat
+  , parseHaskellInt
   ) where
 
 #if !MIN_VERSION_base(4,8,0)
@@ -51,8 +55,8 @@ data HaskLikeAtom
 instance IsString HaskLikeAtom where
   fromString = HSIdent . fromString
 
-pString :: Parser Text
-pString = pack . catMaybes <$> between (char '"') (char '"') (many (val <|> esc))
+parseHaskellString :: Parser Text
+parseHaskellString = pack . catMaybes <$> between (char '"') (char '"') (many (val <|> esc))
   where val = Just <$> satisfy (\ c -> c /= '"' && c /= '\\' && c > '\026')
         esc = do _ <- char '\\'
                  Nothing <$ (gap <|> char '&') <|>
@@ -81,8 +85,8 @@ asciiMap = zip
    "\STX\ETX\EOT\ENQ\ACK\BEL\DLE\DC1\DC2\DC3\DC4\NAK" ++
    "\SYN\ETB\CAN\SUB\ESC\DEL")
 
-pFloat :: Parser Double
-pFloat = do
+parseHaskellFloat :: Parser Double
+parseHaskellFloat = do
   n <- decNumber
   withDot n <|> noDot n
   where withDot n = do
@@ -105,8 +109,8 @@ pFloat = do
 power :: Num a => Parser (a -> a)
 power = negate <$ char '-' <|> id <$ char '+' <|> return id
 
-pInt :: Parser Integer
-pInt = do
+parseHaskellInt :: Parser Integer
+parseHaskellInt = do
   s <- power
   n <- pZeroNum <|> decNumber
   return (fromIntegral (s n))
@@ -121,9 +125,9 @@ pZeroNum = char '0' >>
 
 pHaskLikeAtom :: Parser HaskLikeAtom
 pHaskLikeAtom
-   =  HSFloat   <$> (try pFloat     <?> "float")
-  <|> HSInt     <$> (try pInt       <?> "integer")
-  <|> HSString  <$> (pString        <?> "string literal")
+   =  HSFloat   <$> (try parseHaskellFloat <?> "float")
+  <|> HSInt     <$> (try parseHaskellInt   <?> "integer")
+  <|> HSString  <$> (parseHaskellString    <?> "string literal")
   <|> HSIdent   <$> (parseR5RSIdent <?> "token")
 
 sHaskLikeAtom :: HaskLikeAtom -> Text