import Prelude hiding ((.), curry, uncurry, const) -- Function composition: (f . g) means: apply g, then f to its result -- (.) :: (b -> c) -> (a -> b) -> (a -> c) -- f . g = \x -> f (g x) (.) :: (b -> c) -> (a -> b) -> a -> c (f . g) x = f (g x) -- Transforms a "pair" function into a "Curry-fied" function curry :: ((a,b) -> c) -> a -> b -> c -- curry f = \x y -> f (x,y) curry f x y = f (x,y) -- The opposite direction: uncurry :: (a -> b -> c) -> (a,b) -> c -- uncurry f = \ (x,y) -> f x y uncurry f (x,y) = f x y -- multiplies all sums of a list of pairs: prodMult :: [(Int,Int)] -> Int -- prodMult xs = prod (map (uncurry (+)) xs) prodMult = prod . map (uncurry (+)) where prod = foldr (*) 1 -- Constant function: const :: a -> b -> a const x _ = x