The Backpack patch.
[ghc.git] / testsuite / tests / backpack / should_run / bkprun05.bkp
1 {-# LANGUAGE RoleAnnotations #-}
2 unit app where
3     signature Map where
4         import Data.Typeable
5         import Data.Data
6         import Data.Traversable
7         import Data.Foldable
8         import Data.Monoid
9         import Control.DeepSeq
10         import Control.Applicative
11
12         infixl 9 !,\\
13
14         type role Map nominal representational
15         data Map k a
16
17         instance Functor (Map k)
18         instance Foldable (Map k)
19         instance Traversable (Map k)
20         instance (Eq k, Eq a) => Eq (Map k a)
21         instance (Data k, Data a, Ord k) => Data (Map k a)
22         instance (Ord k, Ord v) => Ord (Map k v)
23         instance (Ord k, Read k, Read e) => Read (Map k e)
24         instance (Show k, Show a) => Show (Map k a)
25         instance Ord k => Monoid (Map k v)
26         instance (NFData k, NFData a) => NFData (Map k a)
27
28         (!) :: Ord k => Map k a -> k -> a
29         (\\) :: Ord k => Map k a -> Map k b -> Map k a
30         null :: Map k a -> Bool
31         size :: Map k a -> Int
32         member :: Ord k => k -> Map k a -> Bool
33         notMember :: Ord k => k -> Map k a -> Bool
34         lookup :: Ord k => k -> Map k a -> Maybe a
35         findWithDefault :: Ord k => a -> k -> Map k a -> a
36         lookupLT :: Ord k => k -> Map k v -> Maybe (k, v)
37         lookupGT :: Ord k => k -> Map k v -> Maybe (k, v)
38         lookupLE :: Ord k => k -> Map k v -> Maybe (k, v)
39         lookupGE :: Ord k => k -> Map k v -> Maybe (k, v)
40         empty :: Map k a
41         singleton :: k -> a -> Map k a
42         insert :: Ord k => k -> a -> Map k a -> Map k a
43         insertWith :: Ord k => (a -> a -> a) -> k -> a -> Map k a -> Map k a
44         insertWithKey :: Ord k => (k -> a -> a -> a) -> k -> a -> Map k a -> Map k a
45         insertLookupWithKey :: Ord k => (k -> a -> a -> a) -> k -> a -> Map k a -> (Maybe a, Map k a)
46         delete :: Ord k => k -> Map k a -> Map k a
47         adjust :: Ord k => (a -> a) -> k -> Map k a -> Map k a
48         adjustWithKey :: Ord k => (k -> a -> a) -> k -> Map k a -> Map k a
49         update :: Ord k => (a -> Maybe a) -> k -> Map k a -> Map k a
50         updateWithKey :: Ord k => (k -> a -> Maybe a) -> k -> Map k a -> Map k a
51         updateLookupWithKey :: Ord k => (k -> a -> Maybe a) -> k -> Map k a -> (Maybe a, Map k a)
52         alter :: Ord k => (Maybe a -> Maybe a) -> k -> Map k a -> Map k a
53         union :: Ord k => Map k a -> Map k a -> Map k a
54         unionWith :: Ord k => (a -> a -> a) -> Map k a -> Map k a -> Map k a
55         unionWithKey :: Ord k => (k -> a -> a -> a) -> Map k a -> Map k a -> Map k a
56         unions :: Ord k => [Map k a] -> Map k a
57         unionsWith :: Ord k => (a -> a -> a) -> [Map k a] -> Map k a
58         difference :: Ord k => Map k a -> Map k b -> Map k a
59         differenceWith :: Ord k => (a -> b -> Maybe a) -> Map k a -> Map k b -> Map k a
60         differenceWithKey :: Ord k => (k -> a -> b -> Maybe a) -> Map k a -> Map k b -> Map k a
61         intersection :: Ord k => Map k a -> Map k b -> Map k a
62         intersectionWith :: Ord k => (a -> b -> c) -> Map k a -> Map k b -> Map k c
63         intersectionWithKey :: Ord k => (k -> a -> b -> c) -> Map k a -> Map k b -> Map k c
64         mergeWithKey :: Ord k => (k -> a -> b -> Maybe c) -> (Map k a -> Map k c) -> (Map k b -> Map k c) -> Map k a -> Map k b -> Map k c
65         map :: (a -> b) -> Map k a -> Map k b
66         mapWithKey :: (k -> a -> b) -> Map k a -> Map k b
67         traverseWithKey :: Applicative t => (k -> a -> t b) -> Map k a -> t (Map k b)
68         mapAccum :: (a -> b -> (a, c)) -> a -> Map k b -> (a, Map k c)
69         mapAccumWithKey :: (a -> k -> b -> (a, c)) -> a -> Map k b -> (a, Map k c)
70         mapAccumRWithKey :: (a -> k -> b -> (a, c)) -> a -> Map k b -> (a, Map k c)
71         mapKeys :: Ord k2 => (k1 -> k2) -> Map k1 a -> Map k2 a
72         mapKeysWith :: Ord k2 => (a -> a -> a) -> (k1 -> k2) -> Map k1 a -> Map k2 a
73         mapKeysMonotonic :: (k1 -> k2) -> Map k1 a -> Map k2 a
74         foldr :: (a -> b -> b) -> b -> Map k a -> b
75         foldl :: (a -> b -> a) -> a -> Map k b -> a
76         foldrWithKey :: (k -> a -> b -> b) -> b -> Map k a -> b
77         foldlWithKey :: (a -> k -> b -> a) -> a -> Map k b -> a
78         foldMapWithKey :: Monoid m => (k -> a -> m) -> Map k a -> m
79         foldr' :: (a -> b -> b) -> b -> Map k a -> b
80         foldl' :: (a -> b -> a) -> a -> Map k b -> a
81         foldrWithKey' :: (k -> a -> b -> b) -> b -> Map k a -> b
82         foldlWithKey' :: (a -> k -> b -> a) -> a -> Map k b -> a
83         elems :: Map k a -> [a]
84         keys :: Map k a -> [k]
85         assocs :: Map k a -> [(k, a)]
86         toList :: Map k a -> [(k, a)]
87         fromList :: Ord k => [(k, a)] -> Map k a
88         fromListWith :: Ord k => (a -> a -> a) -> [(k, a)] -> Map k a
89         fromListWithKey :: Ord k => (k -> a -> a -> a) -> [(k, a)] -> Map k a
90         toAscList :: Map k a -> [(k, a)]
91         toDescList :: Map k a -> [(k, a)]
92         fromAscList :: Eq k => [(k, a)] -> Map k a
93         fromAscListWith :: Eq k => (a -> a -> a) -> [(k, a)] -> Map k a
94         fromAscListWithKey :: Eq k => (k -> a -> a -> a) -> [(k, a)] -> Map k a
95         fromDistinctAscList :: [(k, a)] -> Map k a
96         filter :: (a -> Bool) -> Map k a -> Map k a
97         filterWithKey :: (k -> a -> Bool) -> Map k a -> Map k a
98         partition :: (a -> Bool) -> Map k a -> (Map k a, Map k a)
99         partitionWithKey :: (k -> a -> Bool) -> Map k a -> (Map k a, Map k a)
100         mapMaybe :: (a -> Maybe b) -> Map k a -> Map k b
101         mapMaybeWithKey :: (k -> a -> Maybe b) -> Map k a -> Map k b
102         mapEither :: (a -> Either b c) -> Map k a -> (Map k b, Map k c)
103         mapEitherWithKey :: (k -> a -> Either b c) -> Map k a -> (Map k b, Map k c)
104         split :: Ord k => k -> Map k a -> (Map k a, Map k a)
105         splitLookup :: Ord k => k -> Map k a -> (Map k a, Maybe a, Map k a)
106         splitRoot :: Map k b -> [Map k b]
107         isSubmapOf :: (Ord k, Eq a) => Map k a -> Map k a -> Bool
108         isSubmapOfBy :: Ord k => (a -> b -> Bool) -> Map k a -> Map k b -> Bool
109         isProperSubmapOf :: (Ord k, Eq a) => Map k a -> Map k a -> Bool
110         isProperSubmapOfBy :: Ord k => (a -> b -> Bool) -> Map k a -> Map k b -> Bool
111         lookupIndex :: Ord k => k -> Map k a -> Maybe Int
112         findIndex :: Ord k => k -> Map k a -> Int
113         elemAt :: Int -> Map k a -> (k, a)
114         updateAt :: (k -> a -> Maybe a) -> Int -> Map k a -> Map k a
115         deleteAt :: Int -> Map k a -> Map k a
116         findMin :: Map k a -> (k, a)
117         findMax :: Map k a -> (k, a)
118         deleteMin :: Map k a -> Map k a
119         deleteMax :: Map k a -> Map k a
120         deleteFindMin :: Map k a -> ((k, a), Map k a)
121         deleteFindMax :: Map k a -> ((k, a), Map k a)
122         updateMin :: (a -> Maybe a) -> Map k a -> Map k a
123         updateMax :: (a -> Maybe a) -> Map k a -> Map k a
124         updateMinWithKey :: (k -> a -> Maybe a) -> Map k a -> Map k a
125         updateMaxWithKey :: (k -> a -> Maybe a) -> Map k a -> Map k a
126         minView :: Map k a -> Maybe (a, Map k a)
127         maxView :: Map k a -> Maybe (a, Map k a)
128         minViewWithKey :: Map k a -> Maybe ((k, a), Map k a)
129         maxViewWithKey :: Map k a -> Maybe ((k, a), Map k a)
130         showTree :: (Show k, Show a) => Map k a -> String
131         showTreeWith :: (k -> a -> String) -> Bool -> Bool -> Map k a -> String
132         valid :: Ord k => Map k a -> Bool
133     module App where
134         import Map
135         app = do
136             let x = insert 0 "foo"
137                   . delete 1
138                   . insert 1 undefined
139                   . insert (6 :: Int) "foo"
140                   $ empty
141             print (member 1 x)
142             print (toList x)
143             print x
144
145 unit main where
146     dependency app[Map=containers:Data.Map.Strict] (App as Strict)
147     dependency app[Map=containers:Data.Map.Lazy] (App as Lazy)
148     module Main where
149         import qualified Strict
150         import qualified Lazy
151         main = Lazy.app >> Strict.app