Haskell
( Part deux )
Open
ghc.io
Usage
:t <something>
Show the type of <something>
eg :t False
:i <something>
Show info of <something>
eg :t Bool
To define stuff (in ghci )
let count = 1let add x y = x + yTypes
:t 'c':t False:t 4 == 5 :t "meh." :t (1, '3')Hint
Types are always uppercase
['L', 'I', 'S', 'T']
( list )
Lists are homogenus
Can only store elements of the same type
Example
let lotto = [1,5,6,7]
[1,2,3,4] ++ [9,10,11,12] "hello" ++ " " ++ "world" Operations on lists
'A' : " FAT CAT" 1 : [2,3,4]
[12,11,10,9] !! 3"Good Day" !! 3Lists can also contain lists.
They can also contain lists that contain lists that contain lists …
[[1,2,3], [9,8,7]]Lists can be compared
if the stuff they contain can be compared
[3,2,1] > [2,1,0] [3,4,2] > [3,4] [3,4,2] == [3,4,2] Some
Basic
Functions
head [5,4,3,2,1] tail [5,4,3,2,1] last [5,4,3,2,1] init [5,4,3,2,1] 
length [5,4,3,2,1] reverse [5,4,3,2,1] take 3 [5,4,3,2,1] drop 3 [8,4,2,1,5,6] minimum [8,4,2,1,5,6] 10 `elem` [3,4,5,6] MOAR
4 `elem` [3,4,5,6] maximum [8,4,2,1,5,6] sum [8,4,2,1,5,6] product [8,4,2,1,5,6] Ranges
[1..20] ['a'..'z'] ['K'..'Z'] MOAR
[2,4..20] ['a'..'z'] ['K'..'Z'] Handy Functions
take 10 (cycle [1,2,3]) take 10 (repeat 5) replicate 3 10List comprehensions
[x*2 | x <- [1..10]] [x*2 | x <- [1..10], x*2 >= 12] [x*2 | x <- [1..10], x*2 >= 12] List comprehensions
[ x*y | x <- [2,5,10], y <- [8,10,11]] [ x*y | x <- [2,5,10], y <- [8,10,11], x*y > 50] removeNonUppercase st = [ c | c <- st, c `elem` ['A'..'Z']] removeNonUppercase "Hahaha! Ahahaha!"
"HA" Tuples
fst (8,11) snd (8,11) zip [1,2,3,4,5] [5,5,5,5,5]
[(1,5),(2,5),(3,5),(4,5),(5,5)] Functions
have types
Algebraic
data types
How to
Roll Our
Own
the data keyword
data Bool = True | Falsedata Bool = True | FalseName of our new data type
Value Constructors
Can be read as logical or
The type Bool can have a value of either True or False
Example
shapes
data Shape = Circle Float | Square Float | Rectangle Float FloatYou can optionally add a type after the value constructor.
Value constructors
Are actually functions
They also have type signatures
Haskell
By ..
Haskell
- 2,199