summaryrefslogtreecommitdiff
path: root/testsuite/tests/indexed-types/should_compile/T3220.hs
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/tests/indexed-types/should_compile/T3220.hs')
-rw-r--r--testsuite/tests/indexed-types/should_compile/T3220.hs23
1 files changed, 23 insertions, 0 deletions
diff --git a/testsuite/tests/indexed-types/should_compile/T3220.hs b/testsuite/tests/indexed-types/should_compile/T3220.hs
new file mode 100644
index 0000000000..7d6190a7fa
--- /dev/null
+++ b/testsuite/tests/indexed-types/should_compile/T3220.hs
@@ -0,0 +1,23 @@
+{-# LANGUAGE TypeFamilies, ScopedTypeVariables#-}
+
+module T3220 where
+
+class Foo m where
+ type Bar m :: *
+ action :: m -> Bar m -> m
+
+right x m = action m (Right x)
+
+right' :: (Either a b ~ Bar m, Foo m) => b -> m -> m
+right' x m = action m (Right x)
+
+instance Foo Int where
+ type Bar Int = Either Int Int
+ action m a = either (*) (+) a m
+
+instance Foo Float where
+ type Bar Float = Either Float Float
+ action m a = either (*) (+) a m
+
+foo = print $ right (1::Int) (3 :: Int)
+bar = print $ right (1::Float) (3 :: Float) \ No newline at end of file