shithub: MicroHs

Download patch

ref: b7d664f2212fe7a269fd34a71e6d523eef11cb1b
parent: d3cdee1e3afd1b3507458aaec59e476b418b7eeb
author: Lennart Augustsson <lennart.augustsson@epicgames.com>
date: Sun Nov 19 19:50:07 EST 2023

Add test

--- a/tests/Makefile
+++ b/tests/Makefile
@@ -30,6 +30,7 @@
 	$(MHS) Default    && $(EVAL) > Default.out    && diff Default.ref Default.out
 	$(MHS) Multi      && $(EVAL) > Multi.out      && diff Multi.ref Multi.out
 	$(MHS) Exists     && $(EVAL) > Exists.out     && diff Exists.ref Exists.out
+	$(MHS) TypeEq     && $(EVAL) > TypeEq.out     && diff TypeEq.ref TypeEq.out
 
 errtest:
 	sh errtester.sh < errmsg.test
--- /dev/null
+++ b/tests/TypeEq.hs
@@ -1,0 +1,25 @@
+module TypeEq(main) where
+import Prelude
+
+foo :: forall a . (a ~ Bool) => a -> a
+foo = not
+
+data Exp a
+  = (a ~ Int)  => Int Int
+  | (a ~ Int)  => Add (Exp Int) (Exp Int)
+  | (a ~ Bool) => Equ (Exp Int) (Exp Int)
+  |               Iff (Exp Bool) (Exp a) (Exp a)
+
+eval :: forall a . Exp a -> a
+eval (Int i) = i
+eval (Add e1 e2) = eval e1 + eval e2
+eval (Equ e1 e2) = eval e1 == eval e2
+eval (Iff c e1 e2) = if eval c then eval e1 else eval e2
+
+e1 :: Exp Int
+e1 = Iff (Add (Int 1) (Int 2) `Equ` Int 3) (Int 1) (Int 999)
+
+main :: IO ()
+main = do
+  print (foo True)
+  print (eval e1)
--- /dev/null
+++ b/tests/TypeEq.ref
@@ -1,0 +1,2 @@
+False
+1
--