123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- module Prelude where
- -- Arithmetic operations and some other primitives are builtin
- -- Type signatures are entirely useless here.
- -- Guards on the rhs of function equations are not supported, but in case
- -- expressions they are.
- -- combinators
- id x = x
- const x _ = x
- f $ x = f x
- -- infixr 0 $
- flip f x y = f y x
- (f . g) x = f (g x)
- -- infixr 9 .
- fix f = let x = f x in x
- -- booleans
- not True = False
- not False = True
- True || _ = True
- False || b = b
- -- infixr 2 ||
- False && _ = False
- True && b = b
- -- infixr 3 &&
- -- tuples
- fst (x, _) = x
- snd (_, x) = x
- curry f x y = f (x, y)
- uncurry f (x, y) = f x y
- -- lists
- foldr _ z [] = z
- foldr f z (x:xs) = x `f` foldr f z xs
- foldl _ acc [] = acc
- foldl f acc (x:xs) = foldl f (f acc x) xs
- -- foldl f z xs = foldr (\x r z -> r (f z x)) id xs z
- null [] = True
- null _ = False
- map f [] = []
- map f (x:xs) = f x : map f xs
- head (x:_) = x
- tail (_:xs) = xs
- [] ++ ys = ys
- (x:xs) ++ ys = x : (xs ++ ys)
- -- infixr 5 ++
- take n xs = if n <= 0 then []
- else case xs of
- [] -> []
- y:ys -> y : take (n - 1) ys
- repeat x = let xs = x : xs in xs
- drop n xs = if n <= 0 || null xs
- then xs
- else drop (n - 1) (tail xs)
- length [] = 0
- length (x:xs) = 1 + length xs
- scanl f z [] = [z]
- scanl f z (x:xs) = z : scanl f (f z x) xs
- reverse = foldl (flip (:)) []
- zipWith _ [] _ = []
- zipWith _ _ [] = []
- zipWith (*) (x:xs) (y:ys) = x * y : zipWith (*) xs ys
- iterate f x = x : iterate f (f x)
|