Added missing instances for Identity and Const (#11210)
authorShane O'Brien <shane@duairc.com>
Mon, 21 Dec 2015 19:25:19 +0000 (20:25 +0100)
committerBen Gamari <ben@smart-cactus.org>
Mon, 21 Dec 2015 21:43:48 +0000 (22:43 +0100)
The following instances are added

    instance Bounded a => Bounded (Const a b)
    instance Enum a => Enum (Const a b)
    instance Ix a => Ix (Const a b)
    instance Storable a => Storable (Const a b)

    instance Bounded a => Bounded (Identity a)
    instance Enum a => Enum (Identity a)
    instance Ix a => Ix (Identity a)
    instance Semigroup a => Semigroup (Identity a)
    instance Storable a => Storable (Identity a)

Reviewers: ekmett, RyanGlScott, rwbarton, hvr, austin, bgamari

Reviewed By: RyanGlScott, hvr

Subscribers: rwbarton, RyanGlScott, thomie

Differential Revision: https://phabricator.haskell.org/D1626

GHC Trac Issues: #11210

libraries/base/Data/Functor/Const.hs
libraries/base/Data/Functor/Identity.hs
libraries/base/changelog.md

index 21e6f85..7457951 100644 (file)
 module Data.Functor.Const (Const(..)) where
 
 import Data.Foldable (Foldable(foldMap))
+import Foreign.Storable (Storable)
 
+import GHC.Arr (Ix)
 import GHC.Base
+import GHC.Enum (Bounded, Enum)
 import GHC.Generics (Generic, Generic1)
 import GHC.Read (Read(readsPrec), readParen, lex)
 import GHC.Show (Show(showsPrec), showParen, showString)
 
 -- | The 'Const' functor.
 newtype Const a b = Const { getConst :: a }
-                  deriving (Generic, Generic1, Monoid, Eq, Ord)
+                  deriving ( Generic, Generic1, Bounded, Enum, Eq, Ix, Ord
+                           , Monoid, Storable)
 
 -- | This instance would be equivalent to the derived instances of the
 -- 'Const' newtype if the 'runConst' field were removed
index 46fb666..df424f2 100644 (file)
@@ -39,13 +39,17 @@ import Control.Monad.Zip
 import Data.Coerce
 import Data.Data (Data)
 import Data.Foldable
+import Data.Ix (Ix)
+import Data.Semigroup (Semigroup)
+import Foreign.Storable (Storable)
 import GHC.Generics (Generic, Generic1)
 
 -- | Identity functor and monad. (a non-strict monad)
 --
 -- @since 4.8.0.0
 newtype Identity a = Identity { runIdentity :: a }
-    deriving (Eq, Ord, Data, Monoid, Traversable, Generic, Generic1)
+    deriving ( Bounded, Enum, Eq, Ix, Ord, Data, Monoid, Semigroup
+             , Storable, Traversable, Generic, Generic1)
 
 -- | This instance would be equivalent to the derived instances of the
 -- 'Identity' newtype if the 'runIdentity' field were removed
index 96df6bb..a4472df 100644 (file)
 
   * `ZipList` now has `Foldable` and `Traversable` instances
 
-  * `Identity` now has a `Monoid` instance
+  * `Identity` now has `Semigroup` and `Monoid` instances
+
+  * `Identity` and `Const` now have `Bounded`, `Enum` and `Ix` instances
+
+  * `Identity` and `Const` now have `Storable` instances
 
   * `()` now has a `Storable` instance