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 = 1
let add x y = x + y

Types

: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" !! 3

Lists 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 10

List 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 | False
data Bool = True | False

Name 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 Float

You can optionally add a type after the value constructor.

Value constructors

Are actually functions

They also have type signatures

Haskell

By ..

Haskell

  • 1,787