module Chapter10 where
import Prelude hiding (map,filter,zipWith,foldr1,foldr,concat,and)
import Pictures hiding (flipV,beside)
import qualified Chapter7
map,map' :: (a -> b) -> [a] -> [b]
map' :: forall a b. (a -> b) -> [a] -> [b]
map' a -> b
f [a]
xs = [ a -> b
f a
x | a
x <- [a]
xs ]
map :: forall a b. (a -> b) -> [a] -> [b]
map a -> b
f [] = []
map a -> b
f (a
x:[a]
xs) = a -> b
f a
x b -> [b] -> [b]
forall a. a -> [a] -> [a]
: (a -> b) -> [a] -> [b]
forall a b. (a -> b) -> [a] -> [b]
map a -> b
f [a]
xs
doubleAll :: [Integer] -> [Integer]
doubleAll :: [Integer] -> [Integer]
doubleAll [Integer]
xs = (Integer -> Integer) -> [Integer] -> [Integer]
forall a b. (a -> b) -> [a] -> [b]
map Integer -> Integer
forall {a}. Num a => a -> a
double [Integer]
xs
where
double :: a -> a
double a
x = a
2a -> a -> a
forall a. Num a => a -> a -> a
*a
x
convertChrs :: [Char] -> [Int]
convertChrs :: [Char] -> [Int]
convertChrs [Char]
xs = (Char -> Int) -> [Char] -> [Int]
forall a b. (a -> b) -> [a] -> [b]
map Char -> Int
forall a. Enum a => a -> Int
fromEnum [Char]
xs
flipV :: Picture -> Picture
flipV :: Picture -> Picture
flipV Picture
xs = ([Char] -> [Char]) -> Picture -> Picture
forall a b. (a -> b) -> [a] -> [b]
map [Char] -> [Char]
forall a. [a] -> [a]
reverse Picture
xs
isEven :: Integer -> Bool
isEven :: Integer -> Bool
isEven Integer
n = (Integer
n Integer -> Integer -> Integer
forall a. Integral a => a -> a -> a
`mod` Integer
2 Integer -> Integer -> Bool
forall a. Eq a => a -> a -> Bool
== Integer
0)
isSorted :: [Integer] -> Bool
isSorted :: [Integer] -> Bool
isSorted [Integer]
xs = ([Integer]
xs [Integer] -> [Integer] -> Bool
forall a. Eq a => a -> a -> Bool
== [Integer] -> [Integer]
iSort [Integer]
xs)
filter :: (a -> Bool) -> [a] -> [a]
filter :: forall a. (a -> Bool) -> [a] -> [a]
filter a -> Bool
p [] = []
filter a -> Bool
p (a
x:[a]
xs)
| a -> Bool
p a
x = a
x a -> [a] -> [a]
forall a. a -> [a] -> [a]
: (a -> Bool) -> [a] -> [a]
forall a. (a -> Bool) -> [a] -> [a]
filter a -> Bool
p [a]
xs
| Bool
otherwise = (a -> Bool) -> [a] -> [a]
forall a. (a -> Bool) -> [a] -> [a]
filter a -> Bool
p [a]
xs
filter' :: (a -> Bool) -> [a] -> [a]
filter' a -> Bool
p [a]
xs = [ a
x | a
x <- [a]
xs , a -> Bool
p a
x ]
zipWith :: (a -> b -> c) -> [a] -> [b] -> [c]
zipWith :: forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith a -> b -> c
f (a
x:[a]
xs) (b
y:[b]
ys) = a -> b -> c
f a
x b
y c -> [c] -> [c]
forall a. a -> [a] -> [a]
: (a -> b -> c) -> [a] -> [b] -> [c]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith a -> b -> c
f [a]
xs [b]
ys
zipWith a -> b -> c
f [a]
_ [b]
_ = []
beside :: Picture -> Picture -> Picture
beside :: Picture -> Picture -> Picture
beside Picture
pic1 Picture
pic2 = ([Char] -> [Char] -> [Char]) -> Picture -> Picture -> Picture
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
(++) Picture
pic1 Picture
pic2
foldr1 :: (a -> a -> a) -> [a] -> a
foldr1 :: forall a. (a -> a -> a) -> [a] -> a
foldr1 a -> a -> a
f [a
x] = a
x
foldr1 a -> a -> a
f (a
x:[a]
xs) = a -> a -> a
f a
x ((a -> a -> a) -> [a] -> a
forall a. (a -> a -> a) -> [a] -> a
foldr1 a -> a -> a
f [a]
xs)
foldEx1 :: Integer
foldEx1 = (Integer -> Integer -> Integer) -> [Integer] -> Integer
forall a. (a -> a -> a) -> [a] -> a
foldr1 Integer -> Integer -> Integer
forall a. Num a => a -> a -> a
(+) [Integer
3,Integer
98,Integer
1]
foldEx2 :: Bool
foldEx2 = (Bool -> Bool -> Bool) -> [Bool] -> Bool
forall a. (a -> a -> a) -> [a] -> a
foldr1 Bool -> Bool -> Bool
(||) [Bool
False,Bool
True,Bool
False]
foldEx3 :: [Char]
foldEx3 = ([Char] -> [Char] -> [Char]) -> Picture -> [Char]
forall a. (a -> a -> a) -> [a] -> a
foldr1 [Char] -> [Char] -> [Char]
forall a. [a] -> [a] -> [a]
(++) [[Char]
"Freak ", [Char]
"Out" , [Char]
"", [Char]
"!"]
foldEx4 :: Integer
foldEx4 = (Integer -> Integer -> Integer) -> [Integer] -> Integer
forall a. (a -> a -> a) -> [a] -> a
foldr1 Integer -> Integer -> Integer
forall a. Ord a => a -> a -> a
min [Integer
6]
foldEx5 :: Integer
foldEx5 = (Integer -> Integer -> Integer) -> [Integer] -> Integer
forall a. (a -> a -> a) -> [a] -> a
foldr1 Integer -> Integer -> Integer
forall a. Num a => a -> a -> a
(*) [Integer
1 .. Integer
6]
foldr :: forall a b. (a -> b -> b) -> b -> [a] -> b
foldr a -> b -> b
f b
s [] = b
s
foldr a -> b -> b
f b
s (a
x:[a]
xs) = a -> b -> b
f a
x ((a -> b -> b) -> b -> [a] -> b
forall a b. (a -> b -> b) -> b -> [a] -> b
foldr a -> b -> b
f b
s [a]
xs)
concat :: [[a]] -> [a]
concat :: forall a. [[a]] -> [a]
concat [[a]]
xs = ([a] -> [a] -> [a]) -> [a] -> [[a]] -> [a]
forall a b. (a -> b -> b) -> b -> [a] -> b
foldr [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
(++) [] [[a]]
xs
and :: [Bool] -> Bool
and :: [Bool] -> Bool
and [Bool]
bs = (Bool -> Bool -> Bool) -> Bool -> [Bool] -> Bool
forall a b. (a -> b -> b) -> b -> [a] -> b
foldr Bool -> Bool -> Bool
(&&) Bool
True [Bool]
bs
foldr :: (a -> b -> b) -> b -> [a] -> b
rev :: [a] -> [a]
rev :: forall a. [a] -> [a]
rev [a]
xs = (a -> [a] -> [a]) -> [a] -> [a] -> [a]
forall a b. (a -> b -> b) -> b -> [a] -> b
foldr a -> [a] -> [a]
forall a. a -> [a] -> [a]
snoc [] [a]
xs
snoc :: a -> [a] -> [a]
snoc :: forall a. a -> [a] -> [a]
snoc a
x [a]
xs = [a]
xs [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
++ [a
x]
iSort :: [Integer] -> [Integer]
iSort :: [Integer] -> [Integer]
iSort [Integer]
xs = (Integer -> [Integer] -> [Integer])
-> [Integer] -> [Integer] -> [Integer]
forall a b. (a -> b -> b) -> b -> [a] -> b
foldr Integer -> [Integer] -> [Integer]
Chapter7.ins [] [Integer]
xs
mystery :: [a] -> [a]
mystery [a]
xs = ([a] -> [a] -> [a]) -> [a] -> [[a]] -> [a]
forall a b. (a -> b -> b) -> b -> [a] -> b
foldr [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
(++) [] ((a -> [a]) -> [a] -> [[a]]
forall a b. (a -> b) -> [a] -> [b]
map a -> [a]
forall {a}. a -> [a]
sing [a]
xs)
sing :: a -> [a]
sing a
x = [a
x]
getWord :: String -> String
getWord :: [Char] -> [Char]
getWord [] = []
getWord (Char
x:[Char]
xs)
| Char -> [Char] -> Bool
forall a. Eq a => a -> [a] -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
elem Char
x [Char]
Chapter7.whitespace = []
| Bool
otherwise = Char
x Char -> [Char] -> [Char]
forall a. a -> [a] -> [a]
: [Char] -> [Char]
getWord [Char]
xs
getUntil :: (a -> Bool) -> [a] -> [a]
getUntil :: forall a. (a -> Bool) -> [a] -> [a]
getUntil a -> Bool
p [] = []
getUntil a -> Bool
p (a
x:[a]
xs)
| a -> Bool
p a
x = []
| Bool
otherwise = a
x a -> [a] -> [a]
forall a. a -> [a] -> [a]
: (a -> Bool) -> [a] -> [a]
forall a. (a -> Bool) -> [a] -> [a]
getUntil a -> Bool
p [a]
xs