summaryrefslogtreecommitdiff
path: root/testsuite/tests/typecheck/should_compile/T2683.hs
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/tests/typecheck/should_compile/T2683.hs')
-rw-r--r--testsuite/tests/typecheck/should_compile/T2683.hs31
1 files changed, 31 insertions, 0 deletions
diff --git a/testsuite/tests/typecheck/should_compile/T2683.hs b/testsuite/tests/typecheck/should_compile/T2683.hs
new file mode 100644
index 0000000000..3e8e9e5892
--- /dev/null
+++ b/testsuite/tests/typecheck/should_compile/T2683.hs
@@ -0,0 +1,31 @@
+{-# LANGUAGE ExistentialQuantification, MultiParamTypeClasses,
+ FunctionalDependencies, Rank2Types #-}
+
+module Q where
+
+class Transformer t a | t -> a where
+ transform :: t -> l a -> (forall l'. l' a -> b) -> b
+
+data EL a = forall l. EL (l a)
+
+unEL :: EL a -> (forall l. l a -> b) -> b
+unEL = undefined
+
+transform' :: (Transformer t a) => t -> EL a -> EL a
+transform' = undefined
+
+data MultiToggleS ts a = MultiToggleS ts
+
+data MultiToggle = MultiToggle
+
+expand :: HList ts a => MultiToggleS ts a -> MultiToggle
+expand (MultiToggleS ts) =
+ resolve ts
+ (\x mt ->
+ let g = transform' x in
+ mt
+ )
+ MultiToggle
+
+class HList c a | c -> a where
+ resolve :: c -> (forall t. (Transformer t a) => t -> b) -> b