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
--
⑨