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 34 -- 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!
View Other Posts