summaryrefslogtreecommitdiff
path: root/testsuite/tests/ghc-regress/indexed-types/should_fail/T4179.hs
blob: ee54100cccb2b461e6fc16b30e8777adb7c0de6d (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
{-# LANGUAGE TypeFamilies  #-}

module T4179 where

class DoC a where
     type A2 a
     type A3 a
     op :: a -> A2 a -> A3 a

data Con x = InCon (x (Con x))
type FCon x = x (Con x)

-- should have been changed to this, which works
-- foldDoC :: Functor f => (f a -> a) -> A2 (FCon f) -> Con f -> a
-- foldDoC f i (InCon t) = f (fmap (foldDoC f i) t)
-- this original version causes GHC to hang 
foldDoC :: Functor f => (f a -> a) -> Con f -> a 
foldDoC f (InCon t) = f (fmap (foldDoC f) t)

doCon :: (DoC (FCon x)) => Con x -> A2 (FCon x) -> A3 (FCon x) 
doCon (InCon x) = op x

-- Note that if this is commented out then there's no hang: 
-- presumably because GHC doesn't have to perform type deduction for foldDoC.
fCon :: (Functor x, DoC (FCon x)) => Con x -> A2 (FCon x) -> A3 (FCon x) 
fCon = foldDoC op