Haskell's Marathon - Day Eleven - Part 1

Hey folks!

Yesterday we finished the first three chapters of the book which we are following. Today we will split our day in two steps. First step is to take a review of the first ten days and the second one is to do some exercises.

First, let’s take a quick review.


First Day

The first day was about very basic introduction to Haskell and how to setup our environment. I think the most important here was the tip about use Docker because it makes our way easier. So install Docker, run this command docker run -ti –rm -v $(pwd):/code haskell:7.10 bash, and enjoy Haskell. Beyond that we took a quick look in concepts as immutability, lazy, static types, arithmetics, boolean and functions.


Second Day

The second day we brought one the most important concepts in Haskell which is List and beyond that we talked about IF which is a simple and an niversal concept in development software world. We saw some example of lists:

let numbers = [1,2,3,4]
numbers
[1,2,3,4]
let words = [car,ball,gremio]
words
[car, ball, gremio]

And some about IF too.


Third Day

In the third day we dived more in the List subject. We learnt some about nested lists, comparing lists and range of lists:

-- Nested lists
[[1,2,3],[4,5,6]]
[[1,2,3],[4,5,6]]


[['h','e','l','l','o'],['w','o','r','l','d']]
["hello","world"]


-- Comparing lists
let listA = [1,2,3]
let listB = [1,2,3]
let listC = [1,3,4]


listA == listB
True


listA /= listB
False


listA == listC
False


listA >= listC
False


listA <= listC
True


-- Range of lists
[1..20]
[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]


['A'..'s']
"ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrs"

We also take a look in other operators.


Fourth Day

During the fourth day we still talking about lists and we saw some content about Tuples. First a quick look in the really important subject which is list comprehension.

[ x*2 | x <- [1..10], x*2 > 10]
[12,14,16,18,20]

After a look how to use Tuples in Haskell.

(1,2)
(1,2)
(1,2,”hello”)
(1,2,”hello”)
(1,2,”hello”, True)
(1,2,”hello”, True)


Fifth Day

The fifth day we studied what are static types in Haskell and the valid types which are Int, Integer, Float, Double, Bool, Char and Tuples. We also took a look in how get the type of expressions, values and functions using the :t:

:t a
a :: Char
:t True
True :: Bool
:t 5
5 :: Num a => a
let fnt x = x
fnt 4
4
fnt a
a
:t fnt
fnt :: t -> t


Sixth Day

The sixth day was about type classes and that they are not classes. We took a look in the most important type classes in Haskell.


Seventh Day

The seventh day was a different day. I went in a Haskell meetup where the group is following another book and we worked with folds.


Eight Day

The eight day was a really important one because we studyed Pattern Matching. This subject is really important and it should be reviewed. Here an example:

month' :: Int -> String
month' 5 = "May"
month' 6 = "June"
month' 7 = "July"
month' 8 = "August"
month' _ = "it is not a valid month"


month 5
"May"


month 6
"June"


month 7
"July"


month 9
"it is not a valid month"


Ninth Day

In the ninth day we saw some other options to Pattern Matching as Guards and where:

bmiStatus' :: Double -> Double -> String
bmiStatus' weight height
  | bmi <= 18.5 = "You are underweight!"
  | bmi <= 25 = "You are with ideal weight!"
  | bmi <= 30 = "You are overweight!"
  | otherwise = "You are obese!"
  where bmi = weight / height ^ 2


bmiStatus 85 1.81
"You are overweight!"


bmiStatus 80 1.81
"You are with ideal weight!"


bmiStatus 60 1.81
"You are underweight!"


bmiStatus 100 1.81
"You are obese!"


Tenth Day

The last day we saw more options to Pattern Matching as let..in and case..of:

cylinder :: Double -> Double -> Double
cylinder r h =
  let
    sideArea = 2 * pi * r * h
    topArea = pi * r ^ 2
  in
    sideArea + 2 * topArea


cylinder 8 10
904.7786842338604


head' :: [a] -> a
head' xs = case xs of
  [] -> error "empty list"
  (x:_) -> x


head' []
*** Exception: empty list


head' [1]
1


head' [1,2]
1
Written on December 11, 2016