Ignore some orphan warnings
[ghc-base.git] / Data / Tuple.hs
1 {-# OPTIONS_GHC -XNoImplicitPrelude #-}
2 {-# OPTIONS_GHC -fno-warn-unused-imports #-}
3 {-# OPTIONS_GHC -fno-warn-orphans #-}
4 -- XXX -fno-warn-unused-imports needed for the GHC.Tuple import below. Sigh.
5 -----------------------------------------------------------------------------
6 -- |
7 -- Module      :  Data.Tuple
8 -- Copyright   :  (c) The University of Glasgow 2001
9 -- License     :  BSD-style (see the file libraries/base/LICENSE)
10 -- 
11 -- Maintainer  :  libraries@haskell.org
12 -- Stability   :  experimental
13 -- Portability :  portable
14 --
15 -- The tuple data types, and associated functions.
16 --
17 -----------------------------------------------------------------------------
18
19 module Data.Tuple
20   ( fst         -- :: (a,b) -> a
21   , snd         -- :: (a,b) -> a
22   , curry       -- :: ((a, b) -> c) -> a -> b -> c
23   , uncurry     -- :: (a -> b -> c) -> ((a, b) -> c)
24 #ifdef __NHC__
25   , (,)(..)
26   , (,,)(..)
27   , (,,,)(..)
28   , (,,,,)(..)
29   , (,,,,,)(..)
30   , (,,,,,,)(..)
31   , (,,,,,,,)(..)
32   , (,,,,,,,,)(..)
33   , (,,,,,,,,,)(..)
34   , (,,,,,,,,,,)(..)
35   , (,,,,,,,,,,,)(..)
36   , (,,,,,,,,,,,,)(..)
37   , (,,,,,,,,,,,,,)(..)
38   , (,,,,,,,,,,,,,,)(..)
39 #endif
40   )
41     where
42
43 #ifdef __GLASGOW_HASKELL__
44 import GHC.Bool
45 import GHC.Classes
46 import GHC.Ordering
47 -- XXX The standalone deriving clauses fail with
48 --     The data constructors of `(,)' are not all in scope
49 --       so you cannot derive an instance for it
50 --     In the stand-alone deriving instance for `Eq (a, b)'
51 -- if we don't import GHC.Tuple
52 import GHC.Tuple
53 #endif  /* __GLASGOW_HASKELL__ */
54
55 #ifdef __NHC__
56 import Prelude
57 import Prelude
58   ( (,)(..)
59   , (,,)(..)
60   , (,,,)(..)
61   , (,,,,)(..)
62   , (,,,,,)(..)
63   , (,,,,,,)(..)
64   , (,,,,,,,)(..)
65   , (,,,,,,,,)(..)
66   , (,,,,,,,,,)(..)
67   , (,,,,,,,,,,)(..)
68   , (,,,,,,,,,,,)(..)
69   , (,,,,,,,,,,,,)(..)
70   , (,,,,,,,,,,,,,)(..)
71   , (,,,,,,,,,,,,,,)(..)
72   -- nhc98's prelude only supplies tuple instances up to size 15
73   , fst, snd
74   , curry, uncurry
75   )
76 #endif
77
78 default ()              -- Double isn't available yet
79
80 #ifdef __GLASGOW_HASKELL__
81 -- XXX Why aren't these derived?
82 instance Eq () where
83     () == () = True
84     () /= () = False
85
86 instance Ord () where
87     () <= () = True
88     () <  () = False
89     () >= () = True
90     () >  () = False
91     max () () = ()
92     min () () = ()
93     compare () () = EQ
94
95 #ifndef __HADDOCK__
96 deriving instance (Eq  a, Eq  b) => Eq  (a, b)
97 deriving instance (Ord a, Ord b) => Ord (a, b)
98 deriving instance (Eq  a, Eq  b, Eq  c) => Eq  (a, b, c)
99 deriving instance (Ord a, Ord b, Ord c) => Ord (a, b, c)
100 deriving instance (Eq  a, Eq  b, Eq  c, Eq  d) => Eq  (a, b, c, d)
101 deriving instance (Ord a, Ord b, Ord c, Ord d) => Ord (a, b, c, d)
102 deriving instance (Eq  a, Eq  b, Eq  c, Eq  d, Eq  e) => Eq  (a, b, c, d, e)
103 deriving instance (Ord a, Ord b, Ord c, Ord d, Ord e) => Ord (a, b, c, d, e)
104 deriving instance (Eq a, Eq b, Eq c, Eq d, Eq e, Eq f)
105                => Eq (a, b, c, d, e, f)
106 deriving instance (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f)
107                => Ord (a, b, c, d, e, f)
108 deriving instance (Eq a, Eq b, Eq c, Eq d, Eq e, Eq f, Eq g)
109                => Eq (a, b, c, d, e, f, g)
110 deriving instance (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g)
111                => Ord (a, b, c, d, e, f, g)
112 deriving instance (Eq a, Eq b, Eq c, Eq d, Eq e, Eq f, Eq g,
113                    Eq h)
114                => Eq (a, b, c, d, e, f, g, h)
115 deriving instance (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g,
116                    Ord h)
117                => Ord (a, b, c, d, e, f, g, h)
118 deriving instance (Eq a, Eq b, Eq c, Eq d, Eq e, Eq f, Eq g,
119                    Eq h, Eq i)
120                => Eq (a, b, c, d, e, f, g, h, i)
121 deriving instance (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g,
122                    Ord h, Ord i)
123                => Ord (a, b, c, d, e, f, g, h, i)
124 deriving instance (Eq a, Eq b, Eq c, Eq d, Eq e, Eq f, Eq g,
125                    Eq h, Eq i, Eq j)
126                => Eq (a, b, c, d, e, f, g, h, i, j)
127 deriving instance (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g,
128                    Ord h, Ord i, Ord j)
129                => Ord (a, b, c, d, e, f, g, h, i, j)
130 deriving instance (Eq a, Eq b, Eq c, Eq d, Eq e, Eq f, Eq g,
131                    Eq h, Eq i, Eq j, Eq k)
132                => Eq (a, b, c, d, e, f, g, h, i, j, k)
133 deriving instance (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g,
134                    Ord h, Ord i, Ord j, Ord k)
135                => Ord (a, b, c, d, e, f, g, h, i, j, k)
136 deriving instance (Eq a, Eq b, Eq c, Eq d, Eq e, Eq f, Eq g,
137                    Eq h, Eq i, Eq j, Eq k, Eq l)
138                => Eq (a, b, c, d, e, f, g, h, i, j, k, l)
139 deriving instance (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g,
140                    Ord h, Ord i, Ord j, Ord k, Ord l)
141                => Ord (a, b, c, d, e, f, g, h, i, j, k, l)
142 deriving instance (Eq a, Eq b, Eq c, Eq d, Eq e, Eq f, Eq g,
143                    Eq h, Eq i, Eq j, Eq k, Eq l, Eq m)
144                => Eq (a, b, c, d, e, f, g, h, i, j, k, l, m)
145 deriving instance (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g,
146                    Ord h, Ord i, Ord j, Ord k, Ord l, Ord m)
147                => Ord (a, b, c, d, e, f, g, h, i, j, k, l, m)
148 deriving instance (Eq a, Eq b, Eq c, Eq d, Eq e, Eq f, Eq g,
149                    Eq h, Eq i, Eq j, Eq k, Eq l, Eq m, Eq n)
150                => Eq (a, b, c, d, e, f, g, h, i, j, k, l, m, n)
151 deriving instance (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g,
152                    Ord h, Ord i, Ord j, Ord k, Ord l, Ord m, Ord n)
153                => Ord (a, b, c, d, e, f, g, h, i, j, k, l, m, n)
154 deriving instance (Eq a, Eq b, Eq c, Eq d, Eq e, Eq f, Eq g,
155                    Eq h, Eq i, Eq j, Eq k, Eq l, Eq m, Eq n, Eq o)
156                => Eq (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)
157 deriving instance (Ord a, Ord b, Ord c, Ord d, Ord e, Ord f, Ord g,
158                    Ord h, Ord i, Ord j, Ord k, Ord l, Ord m, Ord n, Ord o)
159                => Ord (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)
160 #endif  /* !__HADDOCK__ */
161 #endif  /* __GLASGOW_HASKELL__ */
162
163 -- ---------------------------------------------------------------------------
164 -- Standard functions over tuples
165
166 #if !defined(__HUGS__) && !defined(__NHC__)
167 -- | Extract the first component of a pair.
168 fst                     :: (a,b) -> a
169 fst (x,_)               =  x
170
171 -- | Extract the second component of a pair.
172 snd                     :: (a,b) -> b
173 snd (_,y)               =  y
174
175 -- | 'curry' converts an uncurried function to a curried function.
176 curry                   :: ((a, b) -> c) -> a -> b -> c
177 curry f x y             =  f (x, y)
178
179 -- | 'uncurry' converts a curried function to a function on pairs.
180 uncurry                 :: (a -> b -> c) -> ((a, b) -> c)
181 uncurry f p             =  f (fst p) (snd p)
182 #endif  /* neither __HUGS__ nor __NHC__ */