Rollback INLINE patches
[ghc-base.git] / GHC / Base.lhs
1 \section[GHC.Base]{Module @GHC.Base@}
2
3 The overall structure of the GHC Prelude is a bit tricky.
4
5   a) We want to avoid "orphan modules", i.e. ones with instance
6         decls that don't belong either to a tycon or a class
7         defined in the same module
8
9   b) We want to avoid giant modules
10
11 So the rough structure is as follows, in (linearised) dependency order
12
13
14 GHC.Prim                Has no implementation.  It defines built-in things, and
15                 by importing it you bring them into scope.
16                 The source file is GHC.Prim.hi-boot, which is just
17                 copied to make GHC.Prim.hi
18
19 GHC.Base        Classes: Eq, Ord, Functor, Monad
20                 Types:   list, (), Int, Bool, Ordering, Char, String
21
22 Data.Tuple      Types: tuples, plus instances for GHC.Base classes
23
24 GHC.Show        Class: Show, plus instances for GHC.Base/GHC.Tup types
25
26 GHC.Enum        Class: Enum,  plus instances for GHC.Base/GHC.Tup types
27
28 Data.Maybe      Type: Maybe, plus instances for GHC.Base classes
29
30 GHC.List        List functions
31
32 GHC.Num         Class: Num, plus instances for Int
33                 Type:  Integer, plus instances for all classes so far (Eq, Ord, Num, Show)
34
35                 Integer is needed here because it is mentioned in the signature
36                 of 'fromInteger' in class Num
37
38 GHC.Real        Classes: Real, Integral, Fractional, RealFrac
39                          plus instances for Int, Integer
40                 Types:  Ratio, Rational
41                         plus intances for classes so far
42
43                 Rational is needed here because it is mentioned in the signature
44                 of 'toRational' in class Real
45
46 GHC.ST  The ST monad, instances and a few helper functions
47
48 Ix              Classes: Ix, plus instances for Int, Bool, Char, Integer, Ordering, tuples
49
50 GHC.Arr         Types: Array, MutableArray, MutableVar
51
52                 Arrays are used by a function in GHC.Float
53
54 GHC.Float       Classes: Floating, RealFloat
55                 Types:   Float, Double, plus instances of all classes so far
56
57                 This module contains everything to do with floating point.
58                 It is a big module (900 lines)
59                 With a bit of luck, many modules can be compiled without ever reading GHC.Float.hi
60
61
62 Other Prelude modules are much easier with fewer complex dependencies.
63
64 \begin{code}
65 {-# OPTIONS_GHC -XNoImplicitPrelude #-}
66 {-# OPTIONS_GHC -fno-warn-orphans #-}
67 {-# OPTIONS_HADDOCK hide #-}
68 -----------------------------------------------------------------------------
69 -- |
70 -- Module      :  GHC.Base
71 -- Copyright   :  (c) The University of Glasgow, 1992-2002
72 -- License     :  see libraries/base/LICENSE
73 -- 
74 -- Maintainer  :  cvs-ghc@haskell.org
75 -- Stability   :  internal
76 -- Portability :  non-portable (GHC extensions)
77 --
78 -- Basic data types and classes.
79 -- 
80 -----------------------------------------------------------------------------
81
82 #include "MachDeps.h"
83
84 -- #hide
85 module GHC.Base
86         (
87         module GHC.Base,
88         module GHC.Bool,
89         module GHC.Classes,
90         module GHC.Generics,
91         module GHC.Ordering,
92         module GHC.Types,
93         module GHC.Prim,        -- Re-export GHC.Prim and GHC.Err, to avoid lots
94         module GHC.Err          -- of people having to import it explicitly
95   ) 
96         where
97
98 import GHC.Types
99 import GHC.Bool
100 import GHC.Classes
101 import GHC.Generics
102 import GHC.Ordering
103 import GHC.Prim
104 import {-# SOURCE #-} GHC.Err
105
106 infixr 9  .
107 infixr 5  ++
108 infixl 1  >>, >>=
109 infixr 0  $
110
111 default ()              -- Double isn't available yet
112 \end{code}
113
114
115 %*********************************************************
116 %*                                                      *
117 \subsection{DEBUGGING STUFF}
118 %*  (for use when compiling GHC.Base itself doesn't work)
119 %*                                                      *
120 %*********************************************************
121
122 \begin{code}
123 {-
124 data  Bool  =  False | True
125 data Ordering = LT | EQ | GT 
126 data Char = C# Char#
127 type  String = [Char]
128 data Int = I# Int#
129 data  ()  =  ()
130 data [] a = MkNil
131
132 not True = False
133 (&&) True True = True
134 otherwise = True
135
136 build = error "urk"
137 foldr = error "urk"
138
139 unpackCString# :: Addr# -> [Char]
140 unpackFoldrCString# :: Addr# -> (Char  -> a -> a) -> a -> a 
141 unpackAppendCString# :: Addr# -> [Char] -> [Char]
142 unpackCStringUtf8# :: Addr# -> [Char]
143 unpackCString# a = error "urk"
144 unpackFoldrCString# a = error "urk"
145 unpackAppendCString# a = error "urk"
146 unpackCStringUtf8# a = error "urk"
147 -}
148 \end{code}
149
150
151 %*********************************************************
152 %*                                                      *
153 \subsection{Monadic classes @Functor@, @Monad@ }
154 %*                                                      *
155 %*********************************************************
156
157 \begin{code}
158 {- | The 'Functor' class is used for types that can be mapped over.
159 Instances of 'Functor' should satisfy the following laws:
160
161 > fmap id  ==  id
162 > fmap (f . g)  ==  fmap f . fmap g
163
164 The instances of 'Functor' for lists, 'Data.Maybe.Maybe' and 'System.IO.IO'
165 defined in the "Prelude" satisfy these laws.
166 -}
167
168 class  Functor f  where
169     fmap        :: (a -> b) -> f a -> f b
170
171 {- | The 'Monad' class defines the basic operations over a /monad/,
172 a concept from a branch of mathematics known as /category theory/.
173 From the perspective of a Haskell programmer, however, it is best to
174 think of a monad as an /abstract datatype/ of actions.
175 Haskell's @do@ expressions provide a convenient syntax for writing
176 monadic expressions.
177
178 Minimal complete definition: '>>=' and 'return'.
179
180 Instances of 'Monad' should satisfy the following laws:
181
182 > return a >>= k  ==  k a
183 > m >>= return  ==  m
184 > m >>= (\x -> k x >>= h)  ==  (m >>= k) >>= h
185
186 Instances of both 'Monad' and 'Functor' should additionally satisfy the law:
187
188 > fmap f xs  ==  xs >>= return . f
189
190 The instances of 'Monad' for lists, 'Data.Maybe.Maybe' and 'System.IO.IO'
191 defined in the "Prelude" satisfy these laws.
192 -}
193
194 class  Monad m  where
195     -- | Sequentially compose two actions, passing any value produced
196     -- by the first as an argument to the second.
197     (>>=)       :: forall a b. m a -> (a -> m b) -> m b
198     -- | Sequentially compose two actions, discarding any value produced
199     -- by the first, like sequencing operators (such as the semicolon)
200     -- in imperative languages.
201     (>>)        :: forall a b. m a -> m b -> m b
202         -- Explicit for-alls so that we know what order to
203         -- give type arguments when desugaring
204
205     -- | Inject a value into the monadic type.
206     return      :: a -> m a
207     -- | Fail with a message.  This operation is not part of the
208     -- mathematical definition of a monad, but is invoked on pattern-match
209     -- failure in a @do@ expression.
210     fail        :: String -> m a
211
212     m >> k      = m >>= \_ -> k
213     fail s      = error s
214 \end{code}
215
216
217 %*********************************************************
218 %*                                                      *
219 \subsection{The list type}
220 %*                                                      *
221 %*********************************************************
222
223 \begin{code}
224 -- do explicitly: deriving (Eq, Ord)
225 -- to avoid weird names like con2tag_[]#
226
227 instance (Eq a) => Eq [a] where
228     {-# SPECIALISE instance Eq [Char] #-}
229     []     == []     = True
230     (x:xs) == (y:ys) = x == y && xs == ys
231     _xs    == _ys    = False
232
233 instance (Ord a) => Ord [a] where
234     {-# SPECIALISE instance Ord [Char] #-}
235     compare []     []     = EQ
236     compare []     (_:_)  = LT
237     compare (_:_)  []     = GT
238     compare (x:xs) (y:ys) = case compare x y of
239                                 EQ    -> compare xs ys
240                                 other -> other
241
242 instance Functor [] where
243     fmap = map
244
245 instance  Monad []  where
246     m >>= k             = foldr ((++) . k) [] m
247     m >> k              = foldr ((++) . (\ _ -> k)) [] m
248     return x            = [x]
249     fail _              = []
250 \end{code}
251
252 A few list functions that appear here because they are used here.
253 The rest of the prelude list functions are in GHC.List.
254
255 ----------------------------------------------
256 --      foldr/build/augment
257 ----------------------------------------------
258   
259 \begin{code}
260 -- | 'foldr', applied to a binary operator, a starting value (typically
261 -- the right-identity of the operator), and a list, reduces the list
262 -- using the binary operator, from right to left:
263 --
264 -- > foldr f z [x1, x2, ..., xn] == x1 `f` (x2 `f` ... (xn `f` z)...)
265
266 foldr            :: (a -> b -> b) -> b -> [a] -> b
267 -- foldr _ z []     =  z
268 -- foldr f z (x:xs) =  f x (foldr f z xs)
269 {-# INLINE [0] foldr #-}
270 -- Inline only in the final stage, after the foldr/cons rule has had a chance
271 foldr k z xs = go xs
272              where
273                go []     = z
274                go (y:ys) = y `k` go ys
275
276 -- | A list producer that can be fused with 'foldr'.
277 -- This function is merely
278 --
279 -- >    build g = g (:) []
280 --
281 -- but GHC's simplifier will transform an expression of the form
282 -- @'foldr' k z ('build' g)@, which may arise after inlining, to @g k z@,
283 -- which avoids producing an intermediate list.
284
285 build   :: forall a. (forall b. (a -> b -> b) -> b -> b) -> [a]
286 {-# INLINE [1] build #-}
287         -- The INLINE is important, even though build is tiny,
288         -- because it prevents [] getting inlined in the version that
289         -- appears in the interface file.  If [] *is* inlined, it
290         -- won't match with [] appearing in rules in an importing module.
291         --
292         -- The "1" says to inline in phase 1
293
294 build g = g (:) []
295
296 -- | A list producer that can be fused with 'foldr'.
297 -- This function is merely
298 --
299 -- >    augment g xs = g (:) xs
300 --
301 -- but GHC's simplifier will transform an expression of the form
302 -- @'foldr' k z ('augment' g xs)@, which may arise after inlining, to
303 -- @g k ('foldr' k z xs)@, which avoids producing an intermediate list.
304
305 augment :: forall a. (forall b. (a->b->b) -> b -> b) -> [a] -> [a]
306 {-# INLINE [1] augment #-}
307 augment g xs = g (:) xs
308
309 {-# RULES
310 "fold/build"    forall k z (g::forall b. (a->b->b) -> b -> b) . 
311                 foldr k z (build g) = g k z
312
313 "foldr/augment" forall k z xs (g::forall b. (a->b->b) -> b -> b) . 
314                 foldr k z (augment g xs) = g k (foldr k z xs)
315
316 "foldr/id"                        foldr (:) [] = \x  -> x
317 "foldr/app"     [1] forall ys. foldr (:) ys = \xs -> xs ++ ys
318         -- Only activate this from phase 1, because that's
319         -- when we disable the rule that expands (++) into foldr
320
321 -- The foldr/cons rule looks nice, but it can give disastrously
322 -- bloated code when commpiling
323 --      array (a,b) [(1,2), (2,2), (3,2), ...very long list... ]
324 -- i.e. when there are very very long literal lists
325 -- So I've disabled it for now. We could have special cases
326 -- for short lists, I suppose.
327 -- "foldr/cons" forall k z x xs. foldr k z (x:xs) = k x (foldr k z xs)
328
329 "foldr/single"  forall k z x. foldr k z [x] = k x z
330 "foldr/nil"     forall k z.   foldr k z []  = z 
331
332 "augment/build" forall (g::forall b. (a->b->b) -> b -> b)
333                        (h::forall b. (a->b->b) -> b -> b) .
334                        augment g (build h) = build (\c n -> g c (h c n))
335 "augment/nil"   forall (g::forall b. (a->b->b) -> b -> b) .
336                         augment g [] = build g
337  #-}
338
339 -- This rule is true, but not (I think) useful:
340 --      augment g (augment h t) = augment (\cn -> g c (h c n)) t
341 \end{code}
342
343
344 ----------------------------------------------
345 --              map     
346 ----------------------------------------------
347
348 \begin{code}
349 -- | 'map' @f xs@ is the list obtained by applying @f@ to each element
350 -- of @xs@, i.e.,
351 --
352 -- > map f [x1, x2, ..., xn] == [f x1, f x2, ..., f xn]
353 -- > map f [x1, x2, ...] == [f x1, f x2, ...]
354
355 map :: (a -> b) -> [a] -> [b]
356 map _ []     = []
357 map f (x:xs) = f x : map f xs
358
359 -- Note eta expanded
360 mapFB ::  (elt -> lst -> lst) -> (a -> elt) -> a -> lst -> lst
361 {-# INLINE [0] mapFB #-}
362 mapFB c f x ys = c (f x) ys
363
364 -- The rules for map work like this.
365 -- 
366 -- Up to (but not including) phase 1, we use the "map" rule to
367 -- rewrite all saturated applications of map with its build/fold 
368 -- form, hoping for fusion to happen.
369 -- In phase 1 and 0, we switch off that rule, inline build, and
370 -- switch on the "mapList" rule, which rewrites the foldr/mapFB
371 -- thing back into plain map.  
372 --
373 -- It's important that these two rules aren't both active at once 
374 -- (along with build's unfolding) else we'd get an infinite loop 
375 -- in the rules.  Hence the activation control below.
376 --
377 -- The "mapFB" rule optimises compositions of map.
378 --
379 -- This same pattern is followed by many other functions: 
380 -- e.g. append, filter, iterate, repeat, etc.
381
382 {-# RULES
383 "map"       [~1] forall f xs.   map f xs                = build (\c n -> foldr (mapFB c f) n xs)
384 "mapList"   [1]  forall f.      foldr (mapFB (:) f) []  = map f
385 "mapFB"     forall c f g.       mapFB (mapFB c f) g     = mapFB c (f.g) 
386   #-}
387 \end{code}
388
389
390 ----------------------------------------------
391 --              append  
392 ----------------------------------------------
393 \begin{code}
394 -- | Append two lists, i.e.,
395 --
396 -- > [x1, ..., xm] ++ [y1, ..., yn] == [x1, ..., xm, y1, ..., yn]
397 -- > [x1, ..., xm] ++ [y1, ...] == [x1, ..., xm, y1, ...]
398 --
399 -- If the first list is not finite, the result is the first list.
400
401 (++) :: [a] -> [a] -> [a]
402 (++) []     ys = ys
403 (++) (x:xs) ys = x : xs ++ ys
404
405 {-# RULES
406 "++"    [~1] forall xs ys. xs ++ ys = augment (\c n -> foldr c n xs) ys
407   #-}
408
409 \end{code}
410
411
412 %*********************************************************
413 %*                                                      *
414 \subsection{Type @Bool@}
415 %*                                                      *
416 %*********************************************************
417
418 \begin{code}
419 -- |The 'Bool' type is an enumeration.  It is defined with 'False'
420 -- first so that the corresponding 'Prelude.Enum' instance will give
421 -- 'Prelude.fromEnum' 'False' the value zero, and
422 -- 'Prelude.fromEnum' 'True' the value 1.
423 -- The actual definition is in the ghc-prim package.
424
425 -- XXX These don't work:
426 -- deriving instance Eq Bool
427 -- deriving instance Ord Bool
428 -- <wired into compiler>:
429 --     Illegal binding of built-in syntax: con2tag_Bool#
430
431 instance Eq Bool where
432     True  == True  = True
433     False == False = True
434     _     == _     = False
435
436 instance Ord Bool where
437     compare False True  = LT
438     compare True  False = GT
439     compare _     _     = EQ
440
441 -- Read is in GHC.Read, Show in GHC.Show
442
443 -- |'otherwise' is defined as the value 'True'.  It helps to make
444 -- guards more readable.  eg.
445 --
446 -- >  f x | x < 0     = ...
447 -- >      | otherwise = ...
448 otherwise               :: Bool
449 otherwise               =  True
450 \end{code}
451
452 %*********************************************************
453 %*                                                      *
454 \subsection{Type @Ordering@}
455 %*                                                      *
456 %*********************************************************
457
458 \begin{code}
459 -- | Represents an ordering relationship between two values: less
460 -- than, equal to, or greater than.  An 'Ordering' is returned by
461 -- 'compare'.
462 -- XXX These don't work:
463 -- deriving instance Eq Ordering
464 -- deriving instance Ord Ordering
465 -- Illegal binding of built-in syntax: con2tag_Ordering#
466 instance Eq Ordering where
467     EQ == EQ = True
468     LT == LT = True
469     GT == GT = True
470     _  == _  = False
471         -- Read in GHC.Read, Show in GHC.Show
472
473 instance Ord Ordering where
474     LT <= _  = True
475     _  <= LT = False
476     EQ <= _  = True
477     _  <= EQ = False
478     GT <= GT = True
479 \end{code}
480
481
482 %*********************************************************
483 %*                                                      *
484 \subsection{Type @Char@ and @String@}
485 %*                                                      *
486 %*********************************************************
487
488 \begin{code}
489 -- | A 'String' is a list of characters.  String constants in Haskell are values
490 -- of type 'String'.
491 --
492 type String = [Char]
493
494 {-| The character type 'Char' is an enumeration whose values represent
495 Unicode (or equivalently ISO\/IEC 10646) characters
496 (see <http://www.unicode.org/> for details).
497 This set extends the ISO 8859-1 (Latin-1) character set
498 (the first 256 charachers), which is itself an extension of the ASCII
499 character set (the first 128 characters).
500 A character literal in Haskell has type 'Char'.
501
502 To convert a 'Char' to or from the corresponding 'Int' value defined
503 by Unicode, use 'Prelude.toEnum' and 'Prelude.fromEnum' from the
504 'Prelude.Enum' class respectively (or equivalently 'ord' and 'chr').
505 -}
506
507 -- We don't use deriving for Eq and Ord, because for Ord the derived
508 -- instance defines only compare, which takes two primops.  Then
509 -- '>' uses compare, and therefore takes two primops instead of one.
510
511 instance Eq Char where
512     (C# c1) == (C# c2) = c1 `eqChar#` c2
513     (C# c1) /= (C# c2) = c1 `neChar#` c2
514
515 instance Ord Char where
516     (C# c1) >  (C# c2) = c1 `gtChar#` c2
517     (C# c1) >= (C# c2) = c1 `geChar#` c2
518     (C# c1) <= (C# c2) = c1 `leChar#` c2
519     (C# c1) <  (C# c2) = c1 `ltChar#` c2
520
521 {-# RULES
522 "x# `eqChar#` x#" forall x#. x# `eqChar#` x# = True
523 "x# `neChar#` x#" forall x#. x# `neChar#` x# = False
524 "x# `gtChar#` x#" forall x#. x# `gtChar#` x# = False
525 "x# `geChar#` x#" forall x#. x# `geChar#` x# = True
526 "x# `leChar#` x#" forall x#. x# `leChar#` x# = True
527 "x# `ltChar#` x#" forall x#. x# `ltChar#` x# = False
528   #-}
529
530 -- | The 'Prelude.toEnum' method restricted to the type 'Data.Char.Char'.
531 chr :: Int -> Char
532 chr (I# i#) | int2Word# i# `leWord#` int2Word# 0x10FFFF# = C# (chr# i#)
533             | otherwise                                  = error "Prelude.chr: bad argument"
534
535 unsafeChr :: Int -> Char
536 unsafeChr (I# i#) = C# (chr# i#)
537
538 -- | The 'Prelude.fromEnum' method restricted to the type 'Data.Char.Char'.
539 ord :: Char -> Int
540 ord (C# c#) = I# (ord# c#)
541 \end{code}
542
543 String equality is used when desugaring pattern-matches against strings.
544
545 \begin{code}
546 eqString :: String -> String -> Bool
547 eqString []       []       = True
548 eqString (c1:cs1) (c2:cs2) = c1 == c2 && cs1 `eqString` cs2
549 eqString _        _        = False
550
551 {-# RULES "eqString" (==) = eqString #-}
552 -- eqString also has a BuiltInRule in PrelRules.lhs:
553 --      eqString (unpackCString# (Lit s1)) (unpackCString# (Lit s2) = s1==s2
554 \end{code}
555
556
557 %*********************************************************
558 %*                                                      *
559 \subsection{Type @Int@}
560 %*                                                      *
561 %*********************************************************
562
563 \begin{code}
564 zeroInt, oneInt, twoInt, maxInt, minInt :: Int
565 zeroInt = I# 0#
566 oneInt  = I# 1#
567 twoInt  = I# 2#
568
569 {- Seems clumsy. Should perhaps put minInt and MaxInt directly into MachDeps.h -}
570 #if WORD_SIZE_IN_BITS == 31
571 minInt  = I# (-0x40000000#)
572 maxInt  = I# 0x3FFFFFFF#
573 #elif WORD_SIZE_IN_BITS == 32
574 minInt  = I# (-0x80000000#)
575 maxInt  = I# 0x7FFFFFFF#
576 #else 
577 minInt  = I# (-0x8000000000000000#)
578 maxInt  = I# 0x7FFFFFFFFFFFFFFF#
579 #endif
580
581 instance Eq Int where
582     (==) = eqInt
583     (/=) = neInt
584
585 instance Ord Int where
586     compare = compareInt
587     (<)     = ltInt
588     (<=)    = leInt
589     (>=)    = geInt
590     (>)     = gtInt
591
592 compareInt :: Int -> Int -> Ordering
593 (I# x#) `compareInt` (I# y#) = compareInt# x# y#
594
595 compareInt# :: Int# -> Int# -> Ordering
596 compareInt# x# y#
597     | x# <#  y# = LT
598     | x# ==# y# = EQ
599     | otherwise = GT
600 \end{code}
601
602
603 %*********************************************************
604 %*                                                      *
605 \subsection{The function type}
606 %*                                                      *
607 %*********************************************************
608
609 \begin{code}
610 -- | Identity function.
611 id                      :: a -> a
612 id x                    =  x
613
614 -- | The call '(lazy e)' means the same as 'e', but 'lazy' has a 
615 -- magical strictness property: it is lazy in its first argument, 
616 -- even though its semantics is strict.
617 lazy :: a -> a
618 lazy x = x
619 -- Implementation note: its strictness and unfolding are over-ridden
620 -- by the definition in MkId.lhs; in both cases to nothing at all.
621 -- That way, 'lazy' does not get inlined, and the strictness analyser
622 -- sees it as lazy.  Then the worker/wrapper phase inlines it.
623 -- Result: happiness
624
625
626 -- | The call '(inline f)' reduces to 'f', but 'inline' has a BuiltInRule
627 -- that tries to inline 'f' (if it has an unfolding) unconditionally
628 -- The 'NOINLINE' pragma arranges that inline only gets inlined (and
629 -- hence eliminated) late in compilation, after the rule has had
630 -- a god chance to fire.
631 inline :: a -> a
632 {-# NOINLINE[0] inline #-}
633 inline x = x
634
635 -- Assertion function.  This simply ignores its boolean argument.
636 -- The compiler may rewrite it to @('assertError' line)@.
637
638 -- | If the first argument evaluates to 'True', then the result is the
639 -- second argument.  Otherwise an 'AssertionFailed' exception is raised,
640 -- containing a 'String' with the source file and line number of the
641 -- call to 'assert'.
642 --
643 -- Assertions can normally be turned on or off with a compiler flag
644 -- (for GHC, assertions are normally on unless optimisation is turned on 
645 -- with @-O@ or the @-fignore-asserts@
646 -- option is given).  When assertions are turned off, the first
647 -- argument to 'assert' is ignored, and the second argument is
648 -- returned as the result.
649
650 --      SLPJ: in 5.04 etc 'assert' is in GHC.Prim,
651 --      but from Template Haskell onwards it's simply
652 --      defined here in Base.lhs
653 assert :: Bool -> a -> a
654 assert _pred r = r
655
656 breakpoint :: a -> a
657 breakpoint r = r
658
659 breakpointCond :: Bool -> a -> a
660 breakpointCond _ r = r
661
662 data Opaque = forall a. O a
663
664 -- | Constant function.
665 const                   :: a -> b -> a
666 const x _               =  x
667
668 -- | Function composition.
669 {-# INLINE (.) #-}
670 (.)       :: (b -> c) -> (a -> b) -> a -> c
671 (.) f g x = f (g x)
672
673 -- | @'flip' f@ takes its (first) two arguments in the reverse order of @f@.
674 flip                    :: (a -> b -> c) -> b -> a -> c
675 flip f x y              =  f y x
676
677 -- | Application operator.  This operator is redundant, since ordinary
678 -- application @(f x)@ means the same as @(f '$' x)@. However, '$' has
679 -- low, right-associative binding precedence, so it sometimes allows
680 -- parentheses to be omitted; for example:
681 --
682 -- >     f $ g $ h x  =  f (g (h x))
683 --
684 -- It is also useful in higher-order situations, such as @'map' ('$' 0) xs@,
685 -- or @'Data.List.zipWith' ('$') fs xs@.
686 {-# INLINE ($) #-}
687 ($)                     :: (a -> b) -> a -> b
688 f $ x                   =  f x
689
690 -- | @'until' p f@ yields the result of applying @f@ until @p@ holds.
691 until                   :: (a -> Bool) -> (a -> a) -> a -> a
692 until p f x | p x       =  x
693             | otherwise =  until p f (f x)
694
695 -- | 'asTypeOf' is a type-restricted version of 'const'.  It is usually
696 -- used as an infix operator, and its typing forces its first argument
697 -- (which is usually overloaded) to have the same type as the second.
698 asTypeOf                :: a -> a -> a
699 asTypeOf                =  const
700 \end{code}
701
702 %*********************************************************
703 %*                                                      *
704 \subsection{@getTag@}
705 %*                                                      *
706 %*********************************************************
707
708 Returns the 'tag' of a constructor application; this function is used
709 by the deriving code for Eq, Ord and Enum.
710
711 The primitive dataToTag# requires an evaluated constructor application
712 as its argument, so we provide getTag as a wrapper that performs the
713 evaluation before calling dataToTag#.  We could have dataToTag#
714 evaluate its argument, but we prefer to do it this way because (a)
715 dataToTag# can be an inline primop if it doesn't need to do any
716 evaluation, and (b) we want to expose the evaluation to the
717 simplifier, because it might be possible to eliminate the evaluation
718 in the case when the argument is already known to be evaluated.
719
720 \begin{code}
721 {-# INLINE getTag #-}
722 getTag :: a -> Int#
723 getTag x = x `seq` dataToTag# x
724 \end{code}
725
726 %*********************************************************
727 %*                                                      *
728 \subsection{Numeric primops}
729 %*                                                      *
730 %*********************************************************
731
732 \begin{code}
733 divInt# :: Int# -> Int# -> Int#
734 x# `divInt#` y#
735         -- Be careful NOT to overflow if we do any additional arithmetic
736         -- on the arguments...  the following  previous version of this
737         -- code has problems with overflow:
738 --    | (x# ># 0#) && (y# <# 0#) = ((x# -# y#) -# 1#) `quotInt#` y#
739 --    | (x# <# 0#) && (y# ># 0#) = ((x# -# y#) +# 1#) `quotInt#` y#
740     | (x# ># 0#) && (y# <# 0#) = ((x# -# 1#) `quotInt#` y#) -# 1#
741     | (x# <# 0#) && (y# ># 0#) = ((x# +# 1#) `quotInt#` y#) -# 1#
742     | otherwise                = x# `quotInt#` y#
743
744 modInt# :: Int# -> Int# -> Int#
745 x# `modInt#` y#
746     | (x# ># 0#) && (y# <# 0#) ||
747       (x# <# 0#) && (y# ># 0#)    = if r# /=# 0# then r# +# y# else 0#
748     | otherwise                   = r#
749     where
750     r# = x# `remInt#` y#
751 \end{code}
752
753 Definitions of the boxed PrimOps; these will be
754 used in the case of partial applications, etc.
755
756 \begin{code}
757 {-# INLINE eqInt #-}
758 {-# INLINE neInt #-}
759 {-# INLINE gtInt #-}
760 {-# INLINE geInt #-}
761 {-# INLINE ltInt #-}
762 {-# INLINE leInt #-}
763 {-# INLINE plusInt #-}
764 {-# INLINE minusInt #-}
765 {-# INLINE timesInt #-}
766 {-# INLINE quotInt #-}
767 {-# INLINE remInt #-}
768 {-# INLINE negateInt #-}
769
770 plusInt, minusInt, timesInt, quotInt, remInt, divInt, modInt, gcdInt :: Int -> Int -> Int
771 (I# x) `plusInt`  (I# y) = I# (x +# y)
772 (I# x) `minusInt` (I# y) = I# (x -# y)
773 (I# x) `timesInt` (I# y) = I# (x *# y)
774 (I# x) `quotInt`  (I# y) = I# (x `quotInt#` y)
775 (I# x) `remInt`   (I# y) = I# (x `remInt#`  y)
776 (I# x) `divInt`   (I# y) = I# (x `divInt#`  y)
777 (I# x) `modInt`   (I# y) = I# (x `modInt#`  y)
778
779 {-# RULES
780 "x# +# 0#" forall x#. x# +# 0# = x#
781 "0# +# x#" forall x#. 0# +# x# = x#
782 "x# -# 0#" forall x#. x# -# 0# = x#
783 "x# -# x#" forall x#. x# -# x# = 0#
784 "x# *# 0#" forall x#. x# *# 0# = 0#
785 "0# *# x#" forall x#. 0# *# x# = 0#
786 "x# *# 1#" forall x#. x# *# 1# = x#
787 "1# *# x#" forall x#. 1# *# x# = x#
788   #-}
789
790 gcdInt (I# a) (I# b) = g a b
791    where g 0# 0# = error "GHC.Base.gcdInt: gcd 0 0 is undefined"
792          g 0# _  = I# absB
793          g _  0# = I# absA
794          g _  _  = I# (gcdInt# absA absB)
795
796          absInt x = if x <# 0# then negateInt# x else x
797
798          absA     = absInt a
799          absB     = absInt b
800
801 negateInt :: Int -> Int
802 negateInt (I# x) = I# (negateInt# x)
803
804 gtInt, geInt, eqInt, neInt, ltInt, leInt :: Int -> Int -> Bool
805 (I# x) `gtInt` (I# y) = x >#  y
806 (I# x) `geInt` (I# y) = x >=# y
807 (I# x) `eqInt` (I# y) = x ==# y
808 (I# x) `neInt` (I# y) = x /=# y
809 (I# x) `ltInt` (I# y) = x <#  y
810 (I# x) `leInt` (I# y) = x <=# y
811
812 {-# RULES
813 "x# ># x#"  forall x#. x# >#  x# = False
814 "x# >=# x#" forall x#. x# >=# x# = True
815 "x# ==# x#" forall x#. x# ==# x# = True
816 "x# /=# x#" forall x#. x# /=# x# = False
817 "x# <# x#"  forall x#. x# <#  x# = False
818 "x# <=# x#" forall x#. x# <=# x# = True
819   #-}
820
821 {-# RULES
822 "plusFloat x 0.0"   forall x#. plusFloat#  x#   0.0# = x#
823 "plusFloat 0.0 x"   forall x#. plusFloat#  0.0# x#   = x#
824 "minusFloat x 0.0"  forall x#. minusFloat# x#   0.0# = x#
825 "minusFloat x x"    forall x#. minusFloat# x#   x#   = 0.0#
826 "timesFloat x 0.0"  forall x#. timesFloat# x#   0.0# = 0.0#
827 "timesFloat0.0 x"   forall x#. timesFloat# 0.0# x#   = 0.0#
828 "timesFloat x 1.0"  forall x#. timesFloat# x#   1.0# = x#
829 "timesFloat 1.0 x"  forall x#. timesFloat# 1.0# x#   = x#
830 "divideFloat x 1.0" forall x#. divideFloat# x#  1.0# = x#
831   #-}
832
833 {-# RULES
834 "plusDouble x 0.0"   forall x#. (+##) x#    0.0## = x#
835 "plusDouble 0.0 x"   forall x#. (+##) 0.0## x#    = x#
836 "minusDouble x 0.0"  forall x#. (-##) x#    0.0## = x#
837 "timesDouble x 1.0"  forall x#. (*##) x#    1.0## = x#
838 "timesDouble 1.0 x"  forall x#. (*##) 1.0## x#    = x#
839 "divideDouble x 1.0" forall x#. (/##) x#    1.0## = x#
840   #-}
841
842 {-
843 We'd like to have more rules, but for example:
844
845 This gives wrong answer (0) for NaN - NaN (should be NaN):
846     "minusDouble x x"    forall x#. (-##) x#    x#    = 0.0##
847
848 This gives wrong answer (0) for 0 * NaN (should be NaN):
849     "timesDouble 0.0 x"  forall x#. (*##) 0.0## x#    = 0.0##
850
851 This gives wrong answer (0) for NaN * 0 (should be NaN):
852     "timesDouble x 0.0"  forall x#. (*##) x#    0.0## = 0.0##
853
854 These are tested by num014.
855 -}
856
857 -- Wrappers for the shift operations.  The uncheckedShift# family are
858 -- undefined when the amount being shifted by is greater than the size
859 -- in bits of Int#, so these wrappers perform a check and return
860 -- either zero or -1 appropriately.
861 --
862 -- Note that these wrappers still produce undefined results when the
863 -- second argument (the shift amount) is negative.
864
865 -- | Shift the argument left by the specified number of bits
866 -- (which must be non-negative).
867 shiftL# :: Word# -> Int# -> Word#
868 a `shiftL#` b   | b >=# WORD_SIZE_IN_BITS# = int2Word# 0#
869                 | otherwise                = a `uncheckedShiftL#` b
870
871 -- | Shift the argument right by the specified number of bits
872 -- (which must be non-negative).
873 shiftRL# :: Word# -> Int# -> Word#
874 a `shiftRL#` b  | b >=# WORD_SIZE_IN_BITS# = int2Word# 0#
875                 | otherwise                = a `uncheckedShiftRL#` b
876
877 -- | Shift the argument left by the specified number of bits
878 -- (which must be non-negative).
879 iShiftL# :: Int# -> Int# -> Int#
880 a `iShiftL#` b  | b >=# WORD_SIZE_IN_BITS# = 0#
881                 | otherwise                = a `uncheckedIShiftL#` b
882
883 -- | Shift the argument right (signed) by the specified number of bits
884 -- (which must be non-negative).
885 iShiftRA# :: Int# -> Int# -> Int#
886 a `iShiftRA#` b | b >=# WORD_SIZE_IN_BITS# = if a <# 0# then (-1#) else 0#
887                 | otherwise                = a `uncheckedIShiftRA#` b
888
889 -- | Shift the argument right (unsigned) by the specified number of bits
890 -- (which must be non-negative).
891 iShiftRL# :: Int# -> Int# -> Int#
892 a `iShiftRL#` b | b >=# WORD_SIZE_IN_BITS# = 0#
893                 | otherwise                = a `uncheckedIShiftRL#` b
894
895 #if WORD_SIZE_IN_BITS == 32
896 {-# RULES
897 "narrow32Int#"  forall x#. narrow32Int#   x# = x#
898 "narrow32Word#" forall x#. narrow32Word#   x# = x#
899    #-}
900 #endif
901
902 {-# RULES
903 "int2Word2Int"  forall x#. int2Word# (word2Int# x#) = x#
904 "word2Int2Word" forall x#. word2Int# (int2Word# x#) = x#
905   #-}
906 \end{code}
907
908
909 %********************************************************
910 %*                                                      *
911 \subsection{Unpacking C strings}
912 %*                                                      *
913 %********************************************************
914
915 This code is needed for virtually all programs, since it's used for
916 unpacking the strings of error messages.
917
918 \begin{code}
919 unpackCString# :: Addr# -> [Char]
920 {-# NOINLINE [1] unpackCString# #-}
921 unpackCString# addr 
922   = unpack 0#
923   where
924     unpack nh
925       | ch `eqChar#` '\0'# = []
926       | otherwise          = C# ch : unpack (nh +# 1#)
927       where
928         ch = indexCharOffAddr# addr nh
929
930 unpackAppendCString# :: Addr# -> [Char] -> [Char]
931 unpackAppendCString# addr rest
932   = unpack 0#
933   where
934     unpack nh
935       | ch `eqChar#` '\0'# = rest
936       | otherwise          = C# ch : unpack (nh +# 1#)
937       where
938         ch = indexCharOffAddr# addr nh
939
940 unpackFoldrCString# :: Addr# -> (Char  -> a -> a) -> a -> a 
941 {-# NOINLINE [0] unpackFoldrCString# #-}
942 -- Don't inline till right at the end;
943 -- usually the unpack-list rule turns it into unpackCStringList
944 -- It also has a BuiltInRule in PrelRules.lhs:
945 --      unpackFoldrCString# "foo" c (unpackFoldrCString# "baz" c n)
946 --        =  unpackFoldrCString# "foobaz" c n
947 unpackFoldrCString# addr f z 
948   = unpack 0#
949   where
950     unpack nh
951       | ch `eqChar#` '\0'# = z
952       | otherwise          = C# ch `f` unpack (nh +# 1#)
953       where
954         ch = indexCharOffAddr# addr nh
955
956 unpackCStringUtf8# :: Addr# -> [Char]
957 unpackCStringUtf8# addr 
958   = unpack 0#
959   where
960     unpack nh
961       | ch `eqChar#` '\0'#   = []
962       | ch `leChar#` '\x7F'# = C# ch : unpack (nh +# 1#)
963       | ch `leChar#` '\xDF'# =
964           C# (chr# (((ord# ch                                  -# 0xC0#) `uncheckedIShiftL#`  6#) +#
965                      (ord# (indexCharOffAddr# addr (nh +# 1#)) -# 0x80#))) :
966           unpack (nh +# 2#)
967       | ch `leChar#` '\xEF'# =
968           C# (chr# (((ord# ch                                  -# 0xE0#) `uncheckedIShiftL#` 12#) +#
969                     ((ord# (indexCharOffAddr# addr (nh +# 1#)) -# 0x80#) `uncheckedIShiftL#`  6#) +#
970                      (ord# (indexCharOffAddr# addr (nh +# 2#)) -# 0x80#))) :
971           unpack (nh +# 3#)
972       | otherwise            =
973           C# (chr# (((ord# ch                                  -# 0xF0#) `uncheckedIShiftL#` 18#) +#
974                     ((ord# (indexCharOffAddr# addr (nh +# 1#)) -# 0x80#) `uncheckedIShiftL#` 12#) +#
975                     ((ord# (indexCharOffAddr# addr (nh +# 2#)) -# 0x80#) `uncheckedIShiftL#`  6#) +#
976                      (ord# (indexCharOffAddr# addr (nh +# 3#)) -# 0x80#))) :
977           unpack (nh +# 4#)
978       where
979         ch = indexCharOffAddr# addr nh
980
981 unpackNBytes# :: Addr# -> Int# -> [Char]
982 unpackNBytes# _addr 0#   = []
983 unpackNBytes#  addr len# = unpack [] (len# -# 1#)
984     where
985      unpack acc i#
986       | i# <# 0#  = acc
987       | otherwise = 
988          case indexCharOffAddr# addr i# of
989             ch -> unpack (C# ch : acc) (i# -# 1#)
990
991 {-# RULES
992 "unpack"       [~1] forall a   . unpackCString# a                  = build (unpackFoldrCString# a)
993 "unpack-list"  [1]  forall a   . unpackFoldrCString# a (:) [] = unpackCString# a
994 "unpack-append"     forall a n . unpackFoldrCString# a (:) n  = unpackAppendCString# a n
995
996 -- There's a built-in rule (in PrelRules.lhs) for
997 --      unpackFoldr "foo" c (unpackFoldr "baz" c n)  =  unpackFoldr "foobaz" c n
998
999   #-}
1000 \end{code}
1001
1002 #ifdef __HADDOCK__
1003 \begin{code}
1004 -- | A special argument for the 'Control.Monad.ST.ST' type constructor,
1005 -- indexing a state embedded in the 'Prelude.IO' monad by
1006 -- 'Control.Monad.ST.stToIO'.
1007 data RealWorld
1008 \end{code}
1009 #endif