{-# LANGUAGE Trustworthy #-}{-# LANGUAGE CPP, NoImplicitPrelude #-}{-# OPTIONS_GHC -fno-warn-unused-imports #-}-- XXX -fno-warn-unused-imports needed for the GHC.Tuple import below. Sigh.------------------------------------------------------------------------------- |-- Module : Data.Tuple-- Copyright : (c) The University of Glasgow 2001-- License : BSD-style (see the file libraries/base/LICENSE)---- Maintainer : libraries@haskell.org-- Stability : experimental-- Portability : portable---- The tuple data types, and associated functions.-------------------------------------------------------------------------------moduleData.Tuple(fst-- :: (a,b) -> a,snd-- :: (a,b) -> a,curry-- :: ((a, b) -> c) -> a -> b -> c,uncurry-- :: (a -> b -> c) -> ((a, b) -> c),swap-- :: (a,b) -> (b,a)#ifdef __NHC__,(,)(..),(,,)(..),(,,,)(..),(,,,,)(..),(,,,,,)(..),(,,,,,,)(..),(,,,,,,,)(..),(,,,,,,,,)(..),(,,,,,,,,,)(..),(,,,,,,,,,,)(..),(,,,,,,,,,,,)(..),(,,,,,,,,,,,,)(..),(,,,,,,,,,,,,,)(..),(,,,,,,,,,,,,,,)(..)#endif)where#ifdef __GLASGOW_HASKELL__importGHC.Base-- We need to depend on GHC.Base so that-- a) so that we get GHC.Classes, GHC.Ordering, GHC.Types-- b) so that GHC.Base.inline is available, which is used-- when expanding instance declarationsimportGHC.Tuple-- We must import GHC.Tuple, to ensure sure that the-- data constructors of `(,)' are in scope when we do-- the standalone deriving instance for Eq (a,b) etc#endif /* __GLASGOW_HASKELL__ */#ifdef __NHC__importPreludeimportPrelude((,)(..),(,,)(..),(,,,)(..),(,,,,)(..),(,,,,,)(..),(,,,,,,)(..),(,,,,,,,)(..),(,,,,,,,,)(..),(,,,,,,,,,)(..),(,,,,,,,,,,)(..),(,,,,,,,,,,,)(..),(,,,,,,,,,,,,)(..),(,,,,,,,,,,,,,)(..),(,,,,,,,,,,,,,,)(..)-- nhc98's prelude only supplies tuple instances up to size 15,fst,snd,curry,uncurry)#endif#ifdef __GLASGOW_HASKELL__importGHC.Unit()#endifdefault()-- Double isn't available yet-- ----------------------------------------------------------------------------- Standard functions over tuples#if !defined(__HUGS__) && !defined(__NHC__)-- | Extract the first component of a pair.fst::(a,b)->afst(x,_)=x-- | Extract the second component of a pair.snd::(a,b)->bsnd(_,y)=y-- | 'curry' converts an uncurried function to a curried function.curry::((a,b)->c)->a->b->ccurryfxy=f(x,y)-- | 'uncurry' converts a curried function to a function on pairs.uncurry::(a->b->c)->((a,b)->c)uncurryfp=f(fstp)(sndp)#endif /* neither __HUGS__ nor __NHC__ */-- | Swap the components of a pair.swap::(a,b)->(b,a)swap(a,b)=(b,a)