summaryrefslogtreecommitdiff
path: root/testsuite/tests/polykinds/PolyKinds12.hs
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/tests/polykinds/PolyKinds12.hs')
-rw-r--r--testsuite/tests/polykinds/PolyKinds12.hs16
1 files changed, 5 insertions, 11 deletions
diff --git a/testsuite/tests/polykinds/PolyKinds12.hs b/testsuite/tests/polykinds/PolyKinds12.hs
index 4d18551cb9..4c1cc4df5c 100644
--- a/testsuite/tests/polykinds/PolyKinds12.hs
+++ b/testsuite/tests/polykinds/PolyKinds12.hs
@@ -2,14 +2,10 @@
module PolyKinds12 where
-type family If1 b t f
+type family If1 (b::Bool) (t::k) (f::k) :: k
type instance If1 True t f = t
type instance If1 False t f = f
-type family If2 (b :: Bool) t f
-type instance If2 True t f = t
-type instance If2 False t f = f
-
data SBool b where
STrue :: SBool True
SFalse :: SBool False
@@ -18,15 +14,13 @@ test1 :: SBool b -> If1 b Int Char
test1 STrue = 42
test1 SFalse = 'H'
-test2 :: SBool b -> If2 b Int Char
+test2 :: SBool b -> If1 b Int Char
test2 STrue = 42
test2 SFalse = 'H'
type family Apply f x
type instance Apply f x = f x
--- Does not work because we do not abstract the return kind of type families
--- Currently If1 returns kind *, which is too restrictive
higher1v1 :: SBool b -> (If1 b Maybe []) Char
higher1v1 STrue = Just 'H'
higher1v1 SFalse = "Hello"
@@ -35,6 +29,6 @@ higher1v2 :: SBool b -> Apply (If1 b Maybe []) Char
higher1v2 STrue = Just 'H'
higher1v2 SFalse = "Hello"
--- higher2 :: SBool b -> (If2 b Maybe []) Int
--- higher2 STrue = Just 42
--- higher2 SFalse = "Hello"
+higher2 :: SBool b -> If1 b Maybe [] Int
+higher2 STrue = Just 42
+higher2 SFalse = [45]