Make int literals parseable
This commit is contained in:
@@ -14,9 +14,10 @@ import Parsing.String.Basic (digit, letter, space)
|
||||
import Parsing.Combinators (many, many1, sepBy, (<|>))
|
||||
import Data.Array (fromFoldable)
|
||||
import Data.Either (hush)
|
||||
import Data.Int (fromString)
|
||||
import Data.List (List(..))
|
||||
import Data.List.NonEmpty (NonEmptyList)
|
||||
import Data.Maybe (Maybe)
|
||||
import Data.Maybe (Maybe, fromMaybe)
|
||||
import Data.String (codePointFromChar, fromCodePointArray)
|
||||
|
||||
charsToString :: NonEmptyList Char -> String
|
||||
@@ -29,7 +30,10 @@ identifier :: Parser String String
|
||||
identifier = (charsToString <$> many1 (letter <|> digit <|> char '_' <|> char '\\')) <* whitespace
|
||||
|
||||
expr :: Parser String (Expr Metavariable)
|
||||
expr = (defer $ \_ -> atom) <|> (defer $ \_ -> metavariable)
|
||||
expr = (defer $ \_ -> intLit) <|> (defer $ \_ -> atom) <|> (defer $ \_ -> metavariable)
|
||||
|
||||
intLit :: Parser String (Expr Metavariable)
|
||||
intLit = (IntLit <<< fromMaybe 0 <<< fromString <<< charsToString) <$> many1 digit
|
||||
|
||||
atom :: Parser String (Expr Metavariable)
|
||||
atom = lift2 Atom (identifier <* whitespace) (args <|> pure Nil)
|
||||
|
||||
Reference in New Issue
Block a user