This repository was archived by the owner on Nov 1, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathWord.hi
42 lines (42 loc) · 4.2 KB
/
Word.hi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
interface Word where {
infixl 7 `bitAnd`;
infixl 5 `bitOr`;
infixl 6 `bitXor`;
infixl 8 `bitRsh`;
infixl 8 `bitLsh`;
data Word;
data Short;
data Byte;
wordToShorts :: Word -> [Short] {-# ARITY _ = 1 #-}{-# STRICTNESS _ = "0,0" ST #-};
wordToBytes :: Word -> [Byte] {-# ARITY _ = 1 #-}{-# STRICTNESS _ = "0,0" ST #-};
bytesToString :: [Byte] -> String {-# ARITY _ = 1 #-}{-# STRICTNESS _ = "0,F" ST #-};
class Bits a where {
bitAnd :: a -> a -> a;
bitOr :: a -> a -> a;
bitXor :: a -> a -> a;
bitCompl :: a -> a;
bitRsh :: a -> Int -> a;
bitLsh :: a -> Int -> a;
bitSwap :: a -> a;
bit0 :: a;
bitSize :: a -> Int
};
wordToInt :: Word -> Int {-# ARITY _ = 1 #-}{-# STRICTNESS _ = "0,F" ST #-};
shortToInt :: Short -> Int {-# ARITY _ = 1 #-}{-# STRICTNESS _ = "0,F" ST #-};
byteToInt :: Byte -> Int {-# ARITY _ = 1 #-}{-# STRICTNESS _ = "0,F" ST #-};
instance Eq Word {-# DERIVED #-} {-# FROMMODULE Word #-};
instance Eq Short {-# DERIVED #-} {-# FROMMODULE Word #-};
instance Eq Byte {-# DERIVED #-} {-# FROMMODULE Word #-};
instance Ord Word {-# DERIVED #-} {-# FROMMODULE Word #-};
instance Ord Short {-# DERIVED #-} {-# FROMMODULE Word #-};
instance Ord Byte {-# DERIVED #-} {-# FROMMODULE Word #-};
instance Num Word {-# FROMMODULE Word #-} {-# STRICTNESS (+) = "0&1,F" ST #-} {-# STRICTNESS (-) = "0&1,F" ST #-} {-# STRICTNESS (*) = "0&1,F" ST #-} {-# STRICTNESS negate = "0,F" ST #-} {-# STRICTNESS abs = "T,F" ST #-} {-# STRICTNESS signum = "T,F" ST #-} {-# STRICTNESS fromInteger = "T,F" ST #-} {-# STRICTNESS fromInt = "T,0" ST #-} {-# STRICTNESS {-:"PfromInteger":-} = "T,F" ST #-};
instance Num Short {-# FROMMODULE Word #-} {-# STRICTNESS (+) = "0&1,F" ST #-} {-# STRICTNESS (-) = "0&1,F" ST #-} {-# STRICTNESS (*) = "0&1,F" ST #-} {-# STRICTNESS negate = "0,F" ST #-} {-# STRICTNESS abs = "T,F" ST #-} {-# STRICTNESS signum = "T,F" ST #-} {-# STRICTNESS fromInteger = "T,F" ST #-} {-# STRICTNESS fromInt = "T,0" ST #-} {-# STRICTNESS {-:"PfromInteger":-} = "T,F" ST #-};
instance Num Byte {-# FROMMODULE Word #-} {-# STRICTNESS (+) = "0&1,F" ST #-} {-# STRICTNESS (-) = "0&1,F" ST #-} {-# STRICTNESS (*) = "0&1,F" ST #-} {-# STRICTNESS negate = "0,F" ST #-} {-# STRICTNESS abs = "T,F" ST #-} {-# STRICTNESS signum = "T,F" ST #-} {-# STRICTNESS fromInteger = "T,F" ST #-} {-# STRICTNESS fromInt = "T,0" ST #-} {-# STRICTNESS {-:"PfromInteger":-} = "T,F" ST #-};
instance Text Word {-# FROMMODULE Word #-} {-# STRICTNESS readsPrec = "T,F" ST #-} {-# STRICTNESS showsPrec = "1,F" ST #-} {-# STRICTNESS readList = "T,F" ST #-} {-# STRICTNESS showList = "T,F" ST #-} {-# STRICTNESS showsType = "T,F" ST #-};
instance Text Short {-# FROMMODULE Word #-} {-# STRICTNESS readsPrec = "T,F" ST #-} {-# STRICTNESS showsPrec = "1,F" ST #-} {-# STRICTNESS readList = "T,F" ST #-} {-# STRICTNESS showList = "T,F" ST #-} {-# STRICTNESS showsType = "T,F" ST #-};
instance Text Byte {-# FROMMODULE Word #-} {-# STRICTNESS readsPrec = "T,F" ST #-} {-# STRICTNESS showsPrec = "1,F" ST #-} {-# STRICTNESS readList = "T,F" ST #-} {-# STRICTNESS showList = "T,F" ST #-} {-# STRICTNESS showsType = "T,F" ST #-};
instance Bits Word {-# FROMMODULE Word #-} {-# STRICTNESS bitAnd = "0&1,F" ST #-} {-# STRICTNESS bitOr = "0&1,F" ST #-} {-# STRICTNESS bitXor = "0&1,F" ST #-} {-# STRICTNESS bitCompl = "0,F" ST #-} {-# STRICTNESS bitRsh = "0,F" ST #-} {-# STRICTNESS bitLsh = "0,F" ST #-} {-# STRICTNESS bitSwap = "0,F" ST #-} {-# STRICTNESS bit0 = "T,T" ST #-} {-# STRICTNESS bitSize = "0,0" ST #-};
instance Bits Short {-# FROMMODULE Word #-} {-# STRICTNESS bitAnd = "0&1,F" ST #-} {-# STRICTNESS bitOr = "0&1,F" ST #-} {-# STRICTNESS bitXor = "0&1,F" ST #-} {-# STRICTNESS bitCompl = "0,F" ST #-} {-# STRICTNESS bitRsh = "0,F" ST #-} {-# STRICTNESS bitLsh = "0,F" ST #-} {-# STRICTNESS bitSwap = "0,F" ST #-} {-# STRICTNESS bit0 = "T,T" ST #-} {-# STRICTNESS bitSize = "0,0" ST #-};
instance Bits Byte {-# FROMMODULE Word #-} {-# STRICTNESS bitAnd = "0&1,F" ST #-} {-# STRICTNESS bitOr = "0&1,F" ST #-} {-# STRICTNESS bitXor = "0&1,F" ST #-} {-# STRICTNESS bitCompl = "0,F" ST #-} {-# STRICTNESS bitRsh = "0,F" ST #-} {-# STRICTNESS bitLsh = "0,F" ST #-} {-# STRICTNESS bitSwap = "0,F" ST #-} {-# STRICTNESS bit0 = "T,T" ST #-} {-# STRICTNESS bitSize = "0,0" ST #-}
}