# Lab Exercise 2 Add this snippet to the bottom of your function definitions ```haskell main :: IO () main = return () ``` ##### If-then-else syntax in Haskell ```haskell= if cond then this else that ``` #### Easy functions - `cube :: Int -> Int` - Consumes an integer and produces the cube of that integer - `double :: Int -> Int` - Consumes an integer and produces the 2 times that integer #### Recursive Functions - `modulus :: Int -> Int -> Int` - Consumes two integers $x$ and $m$ and produces $x \mod m$ - `factorial :: Int -> Int` - Consumes an integer and produces the factorial of the integer #### Higher order function - `compose :: (Int -> Int) -> (Int -> Int) -> (Int -> Int)` - Consumes two functions $f : \mathbb{Z} \to \mathbb{Z}$, and $g: \mathbb{Z} \to \mathbb{Z}$ and produces the function $f \circ g$. - `subtractMaker :: Int -> (Int -> Int)` - Consumes an integer $x$ and produces a function that consumes an integer $y$ and produces $x-y$ - `applyNTimes :: (Int -> Int) -> Int -> Int -> Int` - Consumes a function $f: \mathbb{Z} \to \mathbb{Z}$ and and two integers $n$ and $x$. `applyNTimes` produces an integer which is the result of the function applied to $x$, $n$-times. Similar to `applyTwice` but instead of two times, you're applyung the function $n$-times.