8c7c3cf84c62bc891d79750d0b11f839c94e8098
[ghc-hetmet.git] / ghc / lib / exts / Bits.lhs
1 %
2 % (c) The GRASP/AQUA Project, Glasgow University, 1998
3 %
4 \section[Bits]{The @Bits@ interface}
5
6 Defines the @Bits@ class containing bit-based operations.
7 See library document for details on the semantics of the
8 individual operations.
9
10 \begin{code}
11 {-# OPTIONS -fno-implicit-prelude #-}
12
13 module Bits where
14
15 #ifndef __HUGS__
16 import PrelBase
17 #endif
18
19 --ADR: The fixity for .|. conflicts with that for .|. in Fran.
20 --     Removing all fixities is a fairly safe fix; fixing the "one fixity
21 --     per symbol per program" limitation in Hugs would take a lot longer.
22 #ifndef __HUGS__
23 infixl 8 `shift`, `rotate`
24 infixl 7 .&.
25 infixl 6 `xor`
26 infixl 5 .|.
27 #endif
28
29 class Bits a where
30   (.&.), (.|.), xor :: a -> a -> a
31   complement        :: a -> a
32   shift             :: a -> Int -> a
33   rotate            :: a -> Int -> a
34   bit               :: Int -> a
35   setBit            :: a -> Int -> a
36   clearBit          :: a -> Int -> a
37   complementBit     :: a -> Int -> a
38   testBit           :: a -> Int -> Bool
39   bitSize           :: a -> Int
40   isSigned          :: a -> Bool
41
42 shiftL, shiftR   :: Bits a => a -> Int -> a
43 rotateL, rotateR :: Bits a => a -> Int -> a
44 shiftL  a i = shift  a i
45 shiftR  a i = shift  a (-i)
46 rotateL a i = rotate a i
47 rotateR a i = rotate a (-i)
48 \end{code}