X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Data%2FEither.hs;h=6ffc607303751d47d3c24def28d2dec88886e065;hb=HEAD;hp=0bed2902a3fe7e5578fa41ea359304d3973f8a93;hpb=fb80d56c0b7617261c93a808e9001bbb25a7562e;p=ghc-base.git diff --git a/Data/Either.hs b/Data/Either.hs index 0bed290..6ffc607 100644 --- a/Data/Either.hs +++ b/Data/Either.hs @@ -1,4 +1,8 @@ -{-# OPTIONS_GHC -XNoImplicitPrelude #-} +{-# LANGUAGE CPP, NoImplicitPrelude #-} +#ifdef __GLASGOW_HASKELL__ +{-# LANGUAGE DeriveDataTypeable, DeriveGeneric, StandaloneDeriving #-} +#endif + ----------------------------------------------------------------------------- -- | -- Module : Data.Either @@ -21,11 +25,18 @@ module Data.Either ( partitionEithers, -- :: [Either a b] -> ([a],[b]) ) where -import Data.Tuple () +#include "Typeable.h" #ifdef __GLASGOW_HASKELL__ import GHC.Base +import GHC.Show +import GHC.Read +#endif + +import Data.Typeable +import GHC.Generics (Generic) +#ifdef __GLASGOW_HASKELL__ {- -- just for testing import Test.QuickCheck @@ -41,7 +52,8 @@ either correct or an error; by convention, the 'Left' constructor is used to hold an error value and the 'Right' constructor is used to hold a correct value (mnemonic: \"right\" also means \"correct\"). -} -data Either a b = Left a | Right b deriving (Eq, Ord ) +data Either a b = Left a | Right b + deriving (Eq, Ord, Read, Show, Generic) -- | Case analysis for the 'Either' type. -- If the value is @'Left' a@, apply the first function to @a@; @@ -51,6 +63,8 @@ either f _ (Left x) = f x either _ g (Right y) = g y #endif /* __GLASGOW_HASKELL__ */ +INSTANCE_TYPEABLE2(Either,eitherTc,"Either") + -- | Extracts from a list of 'Either' all the 'Left' elements -- All the 'Left' elements are extracted in order. @@ -71,8 +85,8 @@ rights x = [a | Right a <- x] partitionEithers :: [Either a b] -> ([a],[b]) partitionEithers = foldr (either left right) ([],[]) where - left a (l, r) = (a:l, r) - right a (l, r) = (l, a:r) + left a ~(l, r) = (a:l, r) + right a ~(l, r) = (l, a:r) {- {--------------------------------------------------------------------