38eca7e2389395555d43b83aafd344787f828ec9
[ghc-hetmet.git] / ghc / lib / prelude / IList.hs
1 module PreludeBuiltin where
2
3 import Prel             ( (&&), atan2 )
4 import Cls
5 import Core
6 import IBool
7 import IChar
8 import IComplex
9 import IDouble
10 import IFloat
11 import IInt
12 import IInteger
13 import ITup2
14 import List             ( (++) )
15 import PS               ( _PackedString, _unpackPS )
16 import Text
17 import TyArray
18 import TyComplex
19
20 instance (Eq a) => Eq [a]  where
21     []     == []     = True     
22     (x:xs) == (y:ys) = x == y && xs == ys
23     []     == ys     = False                    
24     xs     == []     = False                    
25     xs     /= ys     = if (xs == ys) then False else True
26
27 instance (Ord a) => Ord [a] where
28     a <  b  = case _tagCmp a b of { _LT -> True;  _EQ -> False; _GT -> False }
29     a <= b  = case _tagCmp a b of { _LT -> True;  _EQ -> True;  _GT -> False }
30     a >= b  = case _tagCmp a b of { _LT -> False; _EQ -> True;  _GT -> True  }
31     a >  b  = case _tagCmp a b of { _LT -> False; _EQ -> False; _GT -> True  }
32
33     max a b = case _tagCmp a b of { _LT -> b; _EQ -> a;  _GT -> a }
34     min a b = case _tagCmp a b of { _LT -> a; _EQ -> a;  _GT -> b }
35
36     _tagCmp []     []     = _EQ
37     _tagCmp (x:xs) []     = _GT
38     _tagCmp []     (y:ys) = _LT
39     _tagCmp (x:xs) (y:ys) = case _tagCmp x y of
40                                  _LT -> _LT     
41                                  _GT -> _GT             
42                                  _EQ -> _tagCmp xs ys
43
44 instance  (Text a) => Text [a]  where
45     readsPrec p    = readList
46     showsPrec p xs = showList xs
47     readList       = _readList (readsPrec 0)
48     showList       = _showList (showsPrec 0)
49
50 {-# SPECIALIZE instance Eq   [Char] #-}
51 {-# SPECIALIZE instance Ord  [Char] #-}
52 {-# SPECIALIZE instance Text [Char] #-}
53
54 {-# SPECIALIZE instance Eq   [Int] #-}
55 {-# SPECIALIZE instance Ord  [Int] #-}
56 {-# SPECIALIZE instance Text [Int] #-}
57
58 {-# SPECIALIZE instance Eq   [Integer] #-}
59 {-# SPECIALIZE instance Ord  [Integer] #-}
60 {-# SPECIALIZE instance Text [Integer] #-}
61
62 --NO:{-# SPECIALIZE instance Eq   [Float] #-}
63 --NO:{-# SPECIALIZE instance Ord  [Float] #-}
64 --NO:{-# SPECIALIZE instance Text [Float] #-}
65
66 {-# SPECIALIZE instance Eq   [Double] #-}
67 {-# SPECIALIZE instance Ord  [Double] #-}
68 {-# SPECIALIZE instance Text [Double] #-}
69
70 {-# SPECIALIZE instance Eq   [Bool] #-}
71 {-# SPECIALIZE instance Ord  [Bool] #-}
72 {-# SPECIALIZE instance Text [Bool] #-}
73
74 {-# SPECIALIZE instance Eq   [[Char]] #-}
75 {-# SPECIALIZE instance Ord  [[Char]] #-}
76 {-# SPECIALIZE instance Text [[Char]] #-}
77
78 {-# SPECIALIZE instance Eq   [[Int]] #-}
79 {-# SPECIALIZE instance Ord  [[Int]] #-}
80 {-# SPECIALIZE instance Text [[Int]] #-}
81
82 {-# SPECIALIZE instance Eq   [Complex Double] #-}
83 {-# SPECIALIZE instance Text [Complex Double] #-}
84
85 {-# SPECIALIZE instance Eq   [(Int,Int)] #-}
86
87 #if defined(__OVERLAPPING_INSTANCES__)
88 instance _CCallable   [Char]
89 instance _CReturnable [Char]
90 #endif
91
92 #if defined(__UNBOXED_INSTANCES__)
93
94 {-# GENERATE_SPECS instance a :: Eq   [a] #-}
95 {-# GENERATE_SPECS instance a :: Ord  [a] #-}
96 {-# GENERATE_SPECS instance a :: Text [a] #-}
97
98 #if defined(__OVERLAPPING_INSTANCES__)
99 instance _CCallable   [Char#]
100 instance _CReturnable [Char#]
101 #endif
102
103 #endif
104
105
106
107