ref: 4e1310bf340ce097b8a9e343df620a5a67230464
parent: e2879fb10e0d1f381286176297a415177a9910af
author: Lennart Augustsson <lennart.augustsson@epicgames.com>
date: Sat Nov 18 18:19:30 EST 2023
Test for existentials.
binary files /dev/null b/tests/Exists differ
--- /dev/null
+++ b/tests/Exists.hs
@@ -1,0 +1,42 @@
+module Exists(main) where
+import Prelude
+
+data E = forall a . Show a => C a
+
+es :: [E]
+es = [C True, C 'a', wrap (C (1::Int))]
+
+instance Show E where
+ show (C a) = show a
+
+wrap :: E -> E
+wrap (C a) = C [a]
+
+eio :: IO E
+eio = return (C True)
+
+someE :: E
+someE = C (Just 'a')
+
+foo :: E -> String
+foo x | C a <- x = show a
+
+bar :: E -> String
+bar x =
+ case x of
+ C a -> show a
+
+data T a = Show a => T a
+
+sh :: forall a . T a -> String
+sh (T a) = show a
+
+main :: IO ()
+main = do
+ print es
+ C x <- eio
+ print x
+ putStrLn (foo someE)
+ putStrLn (bar someE)
+ putStrLn (sh (T True))
+ putStrLn (sh (T 'x'))
--- /dev/null
+++ b/tests/Exists.ref
@@ -1,0 +1,6 @@
+[True,'a',[1]]
+True
+Just 'a'
+Just 'a'
+True
+'x'
--
⑨