diff --git a/haskell-experiments/src/ArithmeticParser.hs b/haskell-experiments/src/ArithmeticParser.hs index 59edd6a..5484da6 100644 --- a/haskell-experiments/src/ArithmeticParser.hs +++ b/haskell-experiments/src/ArithmeticParser.hs @@ -7,7 +7,7 @@ import Text.Megaparsec.Char import qualified Text.Megaparsec.Char.Lexer as L import Data.Void import Data.Text (Text) -import qualified Data.Text as T +-- import qualified Data.Text as T -- Type aliases for convenience type Parser = Parsec Void Text @@ -95,17 +95,3 @@ chainl1 p op = do where rest x = (do f <- op; y <- p; rest (f x y)) <|> pure x --- ┌───────────────────────────────┐ --- │ Examples │ --- └───────────────────────────────┘ -examples :: [(Text, Maybe Expr)] -examples = - [ ("42", Just $ ENumber 42) - , ("-7 + 3", Just $ EAdd (ENumber (-7)) (ENumber 3)) - , ("2 * (3 + 4)", Just $ EMul (ENumber 2) (EAdd (ENumber 3) (ENumber 4))) - , ("10 - 2 * 3", Just $ ESub (ENumber 10) (EMul (ENumber 2) (ENumber 3))) - , ("(8 / 2) + 1", Just $ EAdd (EDiv (ENumber 8) (ENumber 2)) (ENumber 1)) - , ("", Nothing) - , ("5 +", Nothing) -- incomplete - , ("2 ** 3", Nothing) -- ** not supported - ] \ No newline at end of file diff --git a/haskell-experiments/test/Test/ArithmeticParserSpec.hs b/haskell-experiments/test/Test/ArithmeticParserSpec.hs index 2632d5d..7f92728 100644 --- a/haskell-experiments/test/Test/ArithmeticParserSpec.hs +++ b/haskell-experiments/test/Test/ArithmeticParserSpec.hs @@ -14,6 +14,7 @@ module Test.ArithmeticParserSpec where import Test.Hspec import ArithmeticParser +import Data.Either spec :: Spec spec = do @@ -25,6 +26,6 @@ spec = do parseExpr "10 - 2 * 3" `shouldBe` Right (ESub (ENumber 10) (EMul (ENumber 2) (ENumber 3))) parseExpr "(8 / 2) + 1" `shouldBe` Right (EAdd (EDiv (ENumber 8) (ENumber 2)) (ENumber 1)) parseExpr "2 + 3 * (10 - 4)" `shouldBe` Right (EAdd (ENumber 2) (EMul (ENumber 3) (ESub (ENumber 10) (ENumber 4)))) - - - + isLeft (parseExpr "") `shouldBe` True -- missing expression + isLeft (parseExpr "5 +") `shouldBe` True -- incomplete + isLeft (parseExpr "2 ** 3") `shouldBe` True -- not supported