Exploring Haskell: First Steps

The code samples are adapted from Introduction to Functional Programming course.

Best way to try these out is with repl.it where GHCi is easily accessible.

-- Basics
-- The -- is used for comments
2 + 3 * 4 -- 14
(2 + 3) * 4 -- 20

-- Alternative notation
(+) 2 ((*) 3 4) -- 14
(*) ((+) 2 3) 4 -- 20

-- sqrt is a standard library function
sqrt (3^2 + 4^2) -- 5.0

-- Anything in [] is a list which
-- differs from an array or a vector
head [1,2,3,4,5] -- 1
tail [1,2,3,4,5] -- [2,3,4,5]

-- Index from list at linear time
[1,2,3,4,5] !! 2 -- 3

take 3 [1,2,3,4,5] -- [1,2,3]
drop 3 [1,2,3,4,5] -- [4,5]

length [1,2,3,4,5] -- 5

sum [1,2,3,4,5] -- 15
product [1,2,3,4,5] -- 120

reverse [1,2,3,4,5] -- [5,4,3,2,1]

[1,2,3] ++ [4,5] -- [1,2,3,4,5]

-- Character
-- '' are used for single character
'H' -- Char

-- String
-- "" are used for a string
"Hi" -- [Char]

"Hel" ++ "lo" -- "Hello"
length "Hello" -- 5

-- Boolean
True -- True
False -- False

True || False -- True
not True && False -- False

-- Functions
double x = x + x -- Num a => a -> a
double 2 -- 4

quadruple x = double (double x) -- Num a => a -> a
quadruple 2 -- 8

factorial n = product [1..n] -- (Num a, Enum a) => a -> a
factorial 5 -- 120

-- f x y is equal to x `f` y
-- `ns` indicates a list which is simplified Hungarian notation
average ns = sum ns `div` length ns -- Foldable t => t Int -> Int
average [1,2,3,4,5] -- 3

-- Types

:t 1 -- 1 :: Num p => p
:t True -- True :: Bool
:t 'H' -- 'H' :: Char
:t "Hello" -- "Hello" :: [Char]

:t head "Hello" -- head "Hello" :: Char

:t length -- length :: Foldable t => t a -> Int

-- Tuples

(1, 2) -- (Num a, Num b) => (a, b)

(1, "Hello") -- Num a => (a, [Char])

(1, (2, 3)) -- (Num a1, Num a2, Num b) => (a1, (a2, b))

fst (1, "Hello") -- 1

snd (1, "Hello") -- "Hello"

:t fst -- (a, b) -> a
:t snd -- (a, b) -> b

fst (snd (1, (2, 3))) -- 2

-- That's all folks!


You've made it to the end! Sharing this article on your favorite social media network would be highly appreciated 🧑‍💻! For more information you can find me on Twitter.

Published