diff options
author | Herbert Valerio Riedel <hvr@gnu.org> | 2014-01-30 10:34:25 +0100 |
---|---|---|
committer | Herbert Valerio Riedel <hvr@gnu.org> | 2014-01-30 10:39:05 +0100 |
commit | 276c46211feedf979118b654b5310ac45d2434db (patch) | |
tree | 2ca9bb75da0fb8d78b592f4f58e5229b15c7ad0a /libraries/base | |
parent | cc4ba35f054ff728781b47a8a52edef29aaed59f (diff) | |
download | haskell-276c46211feedf979118b654b5310ac45d2434db.tar.gz |
Derive `FiniteBits` for integral newtype wrappers
When `FiniteBits` was introduced in cddc9024e67a6d4c01bb190839d0134af8c907e0
only the standard Haskell 2010 finite-size integral types were given a
`FiniteBits` instance, however, since also a DEPRECATION warning was put
in place (as per 701d9ed4b2bec5922709a91bfb625881d7dd47f0) for `bitSize`
which might point people to to `FiniteBits`, it seems sensible to derive
`FiniteBits` for all integral newtype wrappers as well.
N.B.: This makes `Integer` the only type in `base` with a `Bits`
instance but no `FiniteBits` instance.
Signed-off-by: Herbert Valerio Riedel <hvr@gnu.org>
Diffstat (limited to 'libraries/base')
-rw-r--r-- | libraries/base/Foreign/C/Types.hs | 2 | ||||
-rw-r--r-- | libraries/base/GHC/Event/EPoll.hsc | 4 | ||||
-rw-r--r-- | libraries/base/GHC/Event/KQueue.hsc | 6 | ||||
-rw-r--r-- | libraries/base/GHC/Event/Poll.hsc | 4 | ||||
-rw-r--r-- | libraries/base/include/CTypes.h | 2 |
5 files changed, 9 insertions, 9 deletions
diff --git a/libraries/base/Foreign/C/Types.hs b/libraries/base/Foreign/C/Types.hs index 3a35510148..4aeae53df6 100644 --- a/libraries/base/Foreign/C/Types.hs +++ b/libraries/base/Foreign/C/Types.hs @@ -74,7 +74,7 @@ module Foreign.C.Types ) where import Foreign.Storable -import Data.Bits ( Bits(..) ) +import Data.Bits ( Bits(..), FiniteBits(..) ) import Data.Int ( Int8, Int16, Int32, Int64 ) import Data.Word ( Word8, Word16, Word32, Word64 ) import Data.Typeable diff --git a/libraries/base/GHC/Event/EPoll.hsc b/libraries/base/GHC/Event/EPoll.hsc index fc81441291..b808b21e96 100644 --- a/libraries/base/GHC/Event/EPoll.hsc +++ b/libraries/base/GHC/Event/EPoll.hsc @@ -39,7 +39,7 @@ available = False #include <sys/epoll.h> import Control.Monad (when) -import Data.Bits (Bits, (.|.), (.&.)) +import Data.Bits (Bits, FiniteBits, (.|.), (.&.)) import Data.Maybe (Maybe(..)) import Data.Monoid (Monoid(..)) import Data.Word (Word32) @@ -163,7 +163,7 @@ newtype ControlOp = ControlOp CInt newtype EventType = EventType { unEventType :: Word32 - } deriving (Show, Eq, Num, Bits) + } deriving (Show, Eq, Num, Bits, FiniteBits) #{enum EventType, EventType , epollIn = EPOLLIN diff --git a/libraries/base/GHC/Event/KQueue.hsc b/libraries/base/GHC/Event/KQueue.hsc index b2132f6e9d..bc88855961 100644 --- a/libraries/base/GHC/Event/KQueue.hsc +++ b/libraries/base/GHC/Event/KQueue.hsc @@ -27,7 +27,7 @@ available = False #else import Control.Monad (when) -import Data.Bits (Bits(..)) +import Data.Bits (Bits(..), FiniteBits(..)) import Data.Maybe (Maybe(..)) import Data.Monoid (Monoid(..)) import Data.Word (Word16, Word32) @@ -180,7 +180,7 @@ newtype Flag = Flag Word32 #else newtype Flag = Flag Word16 #endif - deriving (Bits, Eq, Num, Show, Storable) + deriving (Bits, FiniteBits, Eq, Num, Show, Storable) #{enum Flag, Flag , flagAdd = EV_ADD @@ -193,7 +193,7 @@ newtype Filter = Filter Word32 #else newtype Filter = Filter Word16 #endif - deriving (Bits, Eq, Num, Show, Storable) + deriving (Bits, FiniteBits, Eq, Num, Show, Storable) filterRead :: Filter filterRead = Filter (#const EVFILT_READ) diff --git a/libraries/base/GHC/Event/Poll.hsc b/libraries/base/GHC/Event/Poll.hsc index a83278955d..bb0b6e570b 100644 --- a/libraries/base/GHC/Event/Poll.hsc +++ b/libraries/base/GHC/Event/Poll.hsc @@ -26,7 +26,7 @@ available = False import Control.Concurrent.MVar (MVar, newMVar, swapMVar) import Control.Monad ((=<<), liftM, liftM2, unless) -import Data.Bits (Bits, (.|.), (.&.)) +import Data.Bits (Bits, FiniteBits, (.|.), (.&.)) import Data.Maybe (Maybe(..)) import Data.Monoid (Monoid(..)) import Data.Word @@ -150,7 +150,7 @@ data PollFd = PollFd { } deriving (Show) newtype Event = Event CShort - deriving (Eq, Show, Num, Storable, Bits) + deriving (Eq, Show, Num, Storable, Bits, FiniteBits) -- We have to duplicate the whole enum like this in order for the -- hsc2hs cross-compilation mode to work diff --git a/libraries/base/include/CTypes.h b/libraries/base/include/CTypes.h index 77b738c955..ec1813152f 100644 --- a/libraries/base/include/CTypes.h +++ b/libraries/base/include/CTypes.h @@ -17,7 +17,7 @@ -- // GHC can derive any class for a newtype, so we make use of that here... #define ARITHMETIC_CLASSES Eq,Ord,Num,Enum,Storable,Real,Typeable -#define INTEGRAL_CLASSES Bounded,Integral,Bits +#define INTEGRAL_CLASSES Bounded,Integral,Bits,FiniteBits #define FLOATING_CLASSES Fractional,Floating,RealFrac,RealFloat #define ARITHMETIC_TYPE(T,B) \ |