summaryrefslogtreecommitdiff
path: root/libraries/base
diff options
context:
space:
mode:
authorHerbert Valerio Riedel <hvr@gnu.org>2014-01-30 10:34:25 +0100
committerHerbert Valerio Riedel <hvr@gnu.org>2014-01-30 10:39:05 +0100
commit276c46211feedf979118b654b5310ac45d2434db (patch)
tree2ca9bb75da0fb8d78b592f4f58e5229b15c7ad0a /libraries/base
parentcc4ba35f054ff728781b47a8a52edef29aaed59f (diff)
downloadhaskell-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.hs2
-rw-r--r--libraries/base/GHC/Event/EPoll.hsc4
-rw-r--r--libraries/base/GHC/Event/KQueue.hsc6
-rw-r--r--libraries/base/GHC/Event/Poll.hsc4
-rw-r--r--libraries/base/include/CTypes.h2
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) \