49d93047f62aa3b6c8c99cb2637c134b594f588e
[ghc.git] / testsuite / tests / ghci / scripts / ghci047.script
1 --Testing GADTs, type families as well as a ton of crazy type stuff
2 :set -XGADTs
3 :set -XTypeFamilies
4 :set -XOverlappingInstances
5 :set -XFunctionalDependencies
6 :set -XFlexibleContexts
7 :set -XFlexibleInstances
8 :set -XUndecidableInstances
9 data A
10 data B
11 data C
12 :{
13 data ABorC t where
14   Foo :: Int -> ABorC A
15   Bar :: Bool -> ABorC A
16   Baz :: Char -> ABorC B
17   Quz :: ABorC B
18   Yud :: String -> ABorC C
19   Myp :: Double -> ABorC C
20 :}
21 data HTrue
22 data HFalse
23
24 class TypeEq x y b | x y -> b
25 instance (HTrue ~ b)  => TypeEq x x b
26 instance (HFalse ~ b) => TypeEq x y b
27
28 type family Or a b
29 type instance Or HTrue  HTrue  = HTrue
30 type instance Or HTrue  HFalse = HTrue
31 type instance Or HFalse HTrue  = HTrue
32 type instance Or HFalse HFalse = HFalse
33
34 let f :: (Or a c ~ HTrue, TypeEq t A a, TypeEq t C c) => ABorC t -> Int ;    f x = 1
35 f $ Foo 1
36 f $ Bar True
37 f $ Baz 'a'
38 f $ Quz
39 f $ Yud "a"
40 f $ Myp 4.3