The Early Inline Patch
[ghc.git] / testsuite / tests / simplCore / should_compile / T7785.hs
1 {-# LANGUAGE TypeFamilies, ConstraintKinds #-}
2
3 module Foo( shared, foo, bar) where
4 -- module Foo where
5
6 import GHC.Exts
7
8 {-
9 foo :: [Int] -> [Int]
10 foo = let f = map negate
11 in f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f.
12 f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f.
13 f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f.
14 f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f.
15 f . f . f . f . f . f . f . f . f . f . f . f . f
16
17 -}
18
19 type family Domain (f :: * -> *) a :: Constraint
20
21 type instance Domain [] a = ()
22
23 instance MyFunctor [] where
24 myfmap = map
25
26 class MyFunctor f where
27 myfmap :: (Domain f a, Domain f b) => (a -> b) -> f a -> f b
28
29 shared :: (MyFunctor f, Domain f Int) => f Int -> f Int
30 shared = let
31 f = myfmap negate
32 in
33 f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f.
34 f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f.
35 f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f.
36 f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f. f.
37 f . f . f . f . f . f . f . f . f . f . f . f . f
38
39 foo xs = shared $ 0:xs
40 bar xs = 0:shared xs