33c353ca72ae46a9cecabdda7eaec55823ea7b83
[ghc-hetmet.git] / ghc / lib / prelude / IBool.hs
1 module PreludeCore ( Bool(..) ) where
2
3 import Prel             ( (&&) )
4 import Core
5 import Cls
6 import IChar
7 import IInt
8 import IList
9 import List             ( (++), map, foldr )
10 import PS               ( _PackedString, _unpackPS )
11 import Text
12
13 ----------------------------------------------------------------------
14 instance Eq Bool where
15     True  == True       = True
16     False == False      = True
17     _     == _          = False
18
19     True  /= False      = True
20     False /= True       = True
21     _     /= _          = False
22
23 ----------------------------------------------------------------------
24 instance Ord Bool where
25     a <  b  = case _tagCmp a b of { _LT -> True;  _EQ -> False; _GT -> False }
26     a <= b  = case _tagCmp a b of { _LT -> True;  _EQ -> True;  _GT -> False }
27     a >= b  = case _tagCmp a b of { _LT -> False; _EQ -> True;  _GT -> True  }
28     a >  b  = case _tagCmp a b of { _LT -> False; _EQ -> False; _GT -> True  }
29
30     max a b = case _tagCmp a b of { _LT -> b; _EQ -> a;  _GT -> a }
31     min a b = case _tagCmp a b of { _LT -> a; _EQ -> a;  _GT -> b }
32
33     _tagCmp True  True  = _EQ
34     _tagCmp True         False  = _GT
35     _tagCmp False True  = _LT
36     _tagCmp False False = _EQ
37
38 ----------------------------------------------------------------------
39 instance Ix Bool where
40     range   (l,u)   = map bdecode [(bencode l) .. (bencode u)]
41     index   (l,u) i = (bencode i) - (bencode l)
42     inRange (l,u) i = (bencode i) >= (bencode l) && (bencode i) <= (bencode u)
43
44 bencode :: Bool -> Int
45 bencode False = 0
46 bencode True  = 1
47
48 bdecode :: Int -> Bool
49 bdecode b = if      b == 0 then False
50             else if b == 1 then True
51             else error "decode Bool\n"
52
53 ----------------------------------------------------------------------
54 instance Enum Bool where
55     enumFrom False      =  [False, True]
56     enumFrom True       =  [True]
57
58     enumFromThen False True   = [False, True]
59     enumFromThen True  False  = [True, False]
60     enumFromThen b     _      = bs where bs = b : bs
61
62 ----------------------------------------------------------------------
63 instance Text Bool where
64     readsPrec p r
65       = readParen False (\ b -> [ (False, c) | ("False", c) <- lex b ]) r
66      ++ readParen False (\ b -> [ (True,  c) | ("True",  c) <- lex b ]) r
67
68     showsPrec d p = showString (if p then "True" else "False")
69
70 -- ToDo: Binary