summaryrefslogtreecommitdiff
path: root/testsuite/tests/ghc-regress/typecheck/should_compile/T2683.hs
blob: 3e8e9e5892fc233d0bfc4afce6ee73adb8a39b7c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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