[commit: ghc] master: Test Trac #9662 (ed57ea4)

git at git.haskell.org git at git.haskell.org
Tue Nov 11 13:10:13 UTC 2014


Repository : ssh://git@git.haskell.org/ghc

On branch  : master
Link       : http://ghc.haskell.org/trac/ghc/changeset/ed57ea499958824e82c111bd53a69129a8178659/ghc

>---------------------------------------------------------------

commit ed57ea499958824e82c111bd53a69129a8178659
Author: Simon Peyton Jones <simonpj at microsoft.com>
Date:   Tue Nov 11 11:35:48 2014 +0000

    Test Trac #9662


>---------------------------------------------------------------

ed57ea499958824e82c111bd53a69129a8178659
 .../tests/indexed-types/should_compile/T9662.hs    | 53 ++++++++++++++++++++++
 testsuite/tests/indexed-types/should_fail/T9662.hs | 53 ++++++++++++++++++++++
 testsuite/tests/indexed-types/should_fail/all.T    |  1 +
 3 files changed, 107 insertions(+)

diff --git a/testsuite/tests/indexed-types/should_compile/T9662.hs b/testsuite/tests/indexed-types/should_compile/T9662.hs
new file mode 100644
index 0000000..2972eca
--- /dev/null
+++ b/testsuite/tests/indexed-types/should_compile/T9662.hs
@@ -0,0 +1,53 @@
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE TypeOperators #-}
+{-# LANGUAGE FlexibleContexts #-}
+
+module T9662 where
+
+data Exp a = Exp
+data (a:.b) = a:.b
+
+type family Plain e :: *
+type instance Plain (Exp a) = a
+type instance Plain (a:.b) = Plain a :. Plain b
+
+class (Plain (Unlifted pattern) ~ Tuple pattern) => Unlift pattern where
+   type Unlifted pattern
+   type Tuple pattern
+
+modify :: (Unlift pattern) =>
+   pattern ->
+   (Unlifted pattern -> a) ->
+   Exp (Tuple pattern) -> Exp (Plain a)
+modify p f = undefined
+
+
+data Atom a = Atom
+
+atom :: Atom a
+atom = Atom
+
+
+instance (Unlift pa, int ~ Atom Int) => Unlift (pa :. int) where
+   type Unlifted (pa :. int) = Unlifted pa :. Exp Int
+   type Tuple (pa :. int) = Tuple pa :. Int
+
+
+data Shape sh = Shape
+
+backpermute ::
+   (Exp sh -> Exp sh') ->
+   (Exp sh' -> Exp sh) ->
+   Shape sh -> Shape sh'
+backpermute = undefined
+
+test :: Shape (sh:.k:.m:.n) -> Shape (sh:.m:.n:.k)
+test =
+   backpermute
+      (modify (atom:.atom:.atom:.atom)
+         (\(sh:.k:.m:.n) -> (sh:.m:.n:.k)))
+      id
+
+-- With this arg instead of just 'id', it worked
+--    (modify (atom:.atom:.atom:.atom)
+--       (\(ix:.m:.n:.k) -> (ix:.k:.m:.n)))
diff --git a/testsuite/tests/indexed-types/should_fail/T9662.hs b/testsuite/tests/indexed-types/should_fail/T9662.hs
new file mode 100644
index 0000000..2972eca
--- /dev/null
+++ b/testsuite/tests/indexed-types/should_fail/T9662.hs
@@ -0,0 +1,53 @@
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE TypeOperators #-}
+{-# LANGUAGE FlexibleContexts #-}
+
+module T9662 where
+
+data Exp a = Exp
+data (a:.b) = a:.b
+
+type family Plain e :: *
+type instance Plain (Exp a) = a
+type instance Plain (a:.b) = Plain a :. Plain b
+
+class (Plain (Unlifted pattern) ~ Tuple pattern) => Unlift pattern where
+   type Unlifted pattern
+   type Tuple pattern
+
+modify :: (Unlift pattern) =>
+   pattern ->
+   (Unlifted pattern -> a) ->
+   Exp (Tuple pattern) -> Exp (Plain a)
+modify p f = undefined
+
+
+data Atom a = Atom
+
+atom :: Atom a
+atom = Atom
+
+
+instance (Unlift pa, int ~ Atom Int) => Unlift (pa :. int) where
+   type Unlifted (pa :. int) = Unlifted pa :. Exp Int
+   type Tuple (pa :. int) = Tuple pa :. Int
+
+
+data Shape sh = Shape
+
+backpermute ::
+   (Exp sh -> Exp sh') ->
+   (Exp sh' -> Exp sh) ->
+   Shape sh -> Shape sh'
+backpermute = undefined
+
+test :: Shape (sh:.k:.m:.n) -> Shape (sh:.m:.n:.k)
+test =
+   backpermute
+      (modify (atom:.atom:.atom:.atom)
+         (\(sh:.k:.m:.n) -> (sh:.m:.n:.k)))
+      id
+
+-- With this arg instead of just 'id', it worked
+--    (modify (atom:.atom:.atom:.atom)
+--       (\(ix:.m:.n:.k) -> (ix:.k:.m:.n)))
diff --git a/testsuite/tests/indexed-types/should_fail/all.T b/testsuite/tests/indexed-types/should_fail/all.T
index f06060e..0fbee70 100644
--- a/testsuite/tests/indexed-types/should_fail/all.T
+++ b/testsuite/tests/indexed-types/should_fail/all.T
@@ -129,4 +129,5 @@ test('T9371', normal, compile_fail, [''])
 test('T9433', normal, compile_fail, [''])
 test('BadSock', normal, compile_fail, [''])
 test('T9580', normal, multimod_compile_fail, ['T9580', ''])
+test('T9662', normal, compile_fail, [''])
 



More information about the ghc-commits mailing list