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