1 {-# OPTIONS_GHC -XNoImplicitPrelude #-}
2 -----------------------------------------------------------------------------
5 -- Copyright : (c) The University of Glasgow 2001
6 -- License : BSD-style (see the file libraries/base/LICENSE)
8 -- Maintainer : libraries@haskell.org
9 -- Stability : experimental
10 -- Portability : portable
12 -- The tuple data types, and associated functions.
14 -----------------------------------------------------------------------------
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)
30 , (,,,,,,,,,)(..)
31 , (,,,,,,,,,,)(..)
32 , (,,,,,,,,,,,)(..)
33 , (,,,,,,,,,,,,)(..)
34 , (,,,,,,,,,,,,,)(..)
35 , (,,,,,,,,,,,,,,)(..)
40 #ifdef __GLASGOW_HASKELL__
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
48 #endif /* __GLASGOW_HASKELL__ */
61 , (,,,,,,,,,)(..)
62 , (,,,,,,,,,,)(..)
63 , (,,,,,,,,,,,)(..)
64 , (,,,,,,,,,,,,)(..)
65 , (,,,,,,,,,,,,,)(..)
66 , (,,,,,,,,,,,,,,)(..)
67 -- nhc98's prelude only supplies tuple instances up to size 15
73 default () -- Double isn't available yet
75 #ifdef __GLASGOW_HASKELL__
76 -- XXX Why aren't these derived?
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,
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,
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,
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,
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,
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,
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__ */
156 -- ---------------------------------------------------------------------------
157 -- Standard functions over tuples
159 #if !defined(__HUGS__) && !defined(__NHC__)
160 -- | Extract the first component of a pair.
164 -- | Extract the second component of a pair.
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)
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__ */