diff --git a/spago.dhall b/spago.dhall index f3dbe10..1dcd689 100644 --- a/spago.dhall +++ b/spago.dhall @@ -17,6 +17,7 @@ to generate this file without the comments in this block. , "control" , "either" , "foldable-traversable" + , "integers" , "lazy" , "lists" , "logict" diff --git a/src/Language/Bergamot/Parser.purs b/src/Language/Bergamot/Parser.purs index 88f29c4..2373aa6 100644 --- a/src/Language/Bergamot/Parser.purs +++ b/src/Language/Bergamot/Parser.purs @@ -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)