shithub: MicroHs

Download patch

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
+-}