From 1de68e897188941559a7f5bdc1314c69581c9208 Mon Sep 17 00:00:00 2001 From: Arnaud Bailly Date: Fri, 17 Oct 2025 16:28:26 +0200 Subject: feat: can parse an identifier as a variable (symbol) --- .../haskell/test/Minilang/Lambda/ParserSpec.hs | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'lambda-calcul/haskell/test/Minilang') diff --git a/lambda-calcul/haskell/test/Minilang/Lambda/ParserSpec.hs b/lambda-calcul/haskell/test/Minilang/Lambda/ParserSpec.hs index 284c1af..4d6f6e0 100644 --- a/lambda-calcul/haskell/test/Minilang/Lambda/ParserSpec.hs +++ b/lambda-calcul/haskell/test/Minilang/Lambda/ParserSpec.hs @@ -1,9 +1,20 @@ module Minilang.Lambda.ParserSpec where -import Minilang.Lambda.Parser (AST (..), parse) -import Test.Hspec (Spec, it, parallel, shouldBe) +import Data.Text (Text, pack) +import Minilang.Lambda.Parser (AST (..), initialChars, parse, restChars) +import Test.Hspec (Spec, parallel, shouldBe) +import Test.Hspec.QuickCheck (prop) +import Test.QuickCheck (Arbitrary (..), elements, listOf) spec :: Spec spec = parallel $ do - it "parses a variable" $ do - parse "x" `shouldBe` Right (Sym "x") + prop "parses an identifier as a variable" $ \(Identifier ident) -> + parse ident `shouldBe` Right (Sym ident) + +newtype Identifier = Identifier Text + deriving (Eq, Show) + +instance Arbitrary Identifier where + arbitrary = + Identifier . pack + <$> ((:) <$> elements initialChars <*> listOf (elements restChars)) -- cgit v1.2.3