Chapter 4: Defining functions

@laurocaetano and @carlosgaldino just finished the exercises from chapter 4.

Also got interested on how to apply lambda calculus. In the past, I couldn't understand the lambda calculus notation, but when you see 'curried functions' the stuff gets more clear. Plus this post[1] helped me a lot in understanding the notation.

[1] http://www.flyingmachinestudios.com/programming/a-taste-of-the-lambda-calculus/
just discovered the `print` function which is equivalent to `putStrLn . show`

```haskell
λ: :t putStrLn . show
putStrLn . show :: Show a => a -> IO ()
λ: :t print
print :: Show a => a -> IO ()
```