diff options
author | Adam Sandberg Eriksson <adam@sandbergericsson.se> | 2017-04-25 18:41:28 -0400 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2017-04-25 18:41:29 -0400 |
commit | 47be6444d35783eea7dc3ab8b2f11626777cdbd8 (patch) | |
tree | e3902b787e2407a91a32b9a50e8267586d6f7622 | |
parent | 244602697c30e03ba63076941e4742ceeb78dd7c (diff) | |
download | haskell-47be6444d35783eea7dc3ab8b2f11626777cdbd8.tar.gz |
Add instances for Data.Ord.Down
Namely `Num`, `Functor`, `Applicative`, `Monad`, `Semigroup` and
`Monoid` for `Data.Ord.Down` (#13097).
Reviewers: austin, hvr, bgamari, RyanGlScott
Reviewed By: bgamari, RyanGlScott
Subscribers: RyanGlScott, rwbarton, thomie
GHC Trac Issues: #13097
Differential Revision: https://phabricator.haskell.org/D3500
-rw-r--r-- | libraries/base/Data/Ord.hs | 26 | ||||
-rw-r--r-- | libraries/base/Data/Semigroup.hs | 6 | ||||
-rw-r--r-- | libraries/base/changelog.md | 4 | ||||
-rw-r--r-- | libraries/base/tests/T13097.hs | 7 | ||||
-rw-r--r-- | libraries/base/tests/T13097.stdout | 2 | ||||
-rw-r--r-- | libraries/base/tests/all.T | 1 |
6 files changed, 43 insertions, 3 deletions
diff --git a/libraries/base/Data/Ord.hs b/libraries/base/Data/Ord.hs index 767d7b379f..11d6967134 100644 --- a/libraries/base/Data/Ord.hs +++ b/libraries/base/Data/Ord.hs @@ -1,5 +1,6 @@ {-# LANGUAGE Trustworthy #-} {-# LANGUAGE NoImplicitPrelude #-} +{-# LANGUAGE GeneralizedNewtypeDeriving #-} ----------------------------------------------------------------------------- -- | @@ -25,6 +26,7 @@ module Data.Ord ( import GHC.Base import GHC.Show import GHC.Read +import GHC.Num -- | -- > comparing p x y = compare (p x) (p y) @@ -43,11 +45,29 @@ comparing p x y = compare (p x) (p y) -- This is particularly useful when sorting in generalised list comprehensions, -- as in: @then sortWith by 'Down' x@ -- --- Provides 'Show' and 'Read' instances (/since: 4.7.0.0/). --- -- @since 4.6.0.0 -newtype Down a = Down a deriving (Eq, Show, Read) +newtype Down a = Down a + deriving + ( Eq + , Show -- ^ @since 4.7.0.0 + , Read -- ^ @since 4.7.0.0 + , Num -- ^ @since 4.11.0.0 + , Monoid -- ^ @since 4.11.0.0 + ) -- | @since 4.6.0.0 instance Ord a => Ord (Down a) where compare (Down x) (Down y) = y `compare` x + +-- | @since 4.11.0.0 +instance Functor Down where + fmap = coerce + +-- | @since 4.11.0.0 +instance Applicative Down where + pure = Down + (<*>) = coerce + +-- | @since 4.11.0.0 +instance Monad Down where + Down a >>= k = k a diff --git a/libraries/base/Data/Semigroup.hs b/libraries/base/Data/Semigroup.hs index e6bc3140b4..ec68683799 100644 --- a/libraries/base/Data/Semigroup.hs +++ b/libraries/base/Data/Semigroup.hs @@ -83,6 +83,7 @@ import Data.Monoid (All (..), Any (..), Dual (..), Endo (..), Product (..), Sum (..)) import Data.Monoid (Alt (..)) import qualified Data.Monoid as Monoid +import Data.Ord (Down(..)) import Data.Void #ifndef mingw32_HOST_OS import GHC.Event (Event, Lifetime) @@ -238,6 +239,11 @@ instance Semigroup Any where (<>) = coerce (||) stimes = stimesIdempotentMonoid +-- | @since 4.11.0.0 +instance Semigroup a => Semigroup (Down a) where + Down a <> Down b = Down (a <> b) + stimes n (Down a) = Down (stimes n a) + -- | @since 4.9.0.0 instance Num a => Semigroup (Sum a) where diff --git a/libraries/base/changelog.md b/libraries/base/changelog.md index e2e276a4c9..69baab381b 100644 --- a/libraries/base/changelog.md +++ b/libraries/base/changelog.md @@ -5,6 +5,10 @@ * Add `Alternative` instance for `ZipList` (#13520) + * Add instances `Num`, `Functor`, `Applicative`, `Monad`, `Semigroup` + and `Monoid` for `Data.Ord.Down` (#13097). + + ## 4.10.0.0 *April 2017* * Bundled with GHC *TBA* diff --git a/libraries/base/tests/T13097.hs b/libraries/base/tests/T13097.hs new file mode 100644 index 0000000000..f51b7cf7ab --- /dev/null +++ b/libraries/base/tests/T13097.hs @@ -0,0 +1,7 @@ +{-# LANGUAGE TypeApplications #-} +import Data.Ord + +main :: IO () +main = do + print ((<) 10 20) + print ((<) @(Down _) 10 20) diff --git a/libraries/base/tests/T13097.stdout b/libraries/base/tests/T13097.stdout new file mode 100644 index 0000000000..1cc8b5e10d --- /dev/null +++ b/libraries/base/tests/T13097.stdout @@ -0,0 +1,2 @@ +True +False diff --git a/libraries/base/tests/all.T b/libraries/base/tests/all.T index 33055f3bdd..4bd8084220 100644 --- a/libraries/base/tests/all.T +++ b/libraries/base/tests/all.T @@ -213,3 +213,4 @@ test('T13191', compile_and_run, ['-O']) test('T13525', when(opsys('mingw32'), skip), compile_and_run, ['']) +test('T13097', normal, compile_and_run, ['']) |