ref: 189836c78d9c397a36a5e8f903f18feb8818ae64
parent: d24fd07ecfe72110ce09125dc3d474304af960ea
author: Lennart Augustsson <lennart@augustsson.net>
date: Fri Dec 13 14:46:03 EST 2024
Add simple pattern synonym test.
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -77,6 +77,7 @@
$(TMHS) Bang && $(EVAL) > Bang.out && diff Bang.ref Bang.out
$(TMHS) MString && $(EVAL) > MString.out && diff MString.ref MString.out
$(TMHS) OrPat && $(EVAL) > OrPat.out && diff OrPat.ref OrPat.out
+ $(TMHS) PatSyn && $(EVAL) > PaySyn.out && diff PatSyn.ref PatSyn.out
errtest:
sh errtester.sh $(MHS) < errmsg.test
--- /dev/null
+++ b/tests/PatSyn.hs
@@ -1,0 +1,16 @@
+module PatSyn where
+import PatSynE
+
+f1 :: [a] -> (a, [a])
+f1 (Sings a as) = (a, as)
+
+f2 :: [a] -> a
+f2 (Sing a) = a
+
+main :: IO ()
+main = do
+ print (Sing 1)
+ print (Swap 1 2)
+ print (f1 [3])
+ print (f2 [4])
+-- print (Sings 1 [2]) this is an error, of course
--- /dev/null
+++ b/tests/PatSyn.ref
@@ -1,0 +1,4 @@
+[1]
+[2,1]
+(3,[3])
+4
--- /dev/null
+++ b/tests/PatSynE.hs
@@ -1,0 +1,19 @@
+module PatSynE(pattern Sing, pattern Sings, pattern Swap) where
+
+pattern Sing :: a -> [a]
+pattern Sing a = [a]
+
+pattern Sings a as <- as@[a]
+
+pattern Swap :: a -> a -> [a]
+pattern Swap a b = [b, a]
+
+{-
+pattern Dup :: Eq a => a -> [a]
+pattern Dup a <- [(dup -> (Just a))]
+ where Dup a = [a, a]
+
+dup :: (Eq a) => [a] -> Maybe a
+dup [x,x'] | x==x' = Just x
+dup _ = Nothing
+-}