0% found this document useful (0 votes)
12 views23 pages

CH 2

The document introduces the Glasgow Haskell Compiler (GHC) and its interactive interpreter GHCi, which is useful for teaching and prototyping. It covers basic operations in Haskell, including list manipulation functions and defining custom functions in scripts. Additionally, it explains naming conventions, the layout rule for definitions, and provides exercises for practice.

Uploaded by

Justin Wong
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
12 views23 pages

CH 2

The document introduces the Glasgow Haskell Compiler (GHC) and its interactive interpreter GHCi, which is useful for teaching and prototyping. It covers basic operations in Haskell, including list manipulation functions and defining custom functions in scripts. Additionally, it explains naming conventions, the layout rule for definitions, and provides exercises for practice.

Uploaded by

Justin Wong
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 23

PROGRAMMING IN HASKELL

Chapter 2 - First Steps

1
Glasgow Haskell Compiler

 GHC is the leading implementation of


Haskell, and comprises a compiler and
interpreter;

 The interactive nature of the interpreter


makes it well suited for teaching and
prototyping;

 GHC is freely available from:


www.haskell.org/downloads

2
Starting GHCi

The interpreter can be started from the


terminal command prompt $ by simply
typing ghci:
$ ghci

GHCi, version X: http://www.haskell.org/ghc/ :? for help

Prelude>

The GHCi prompt > means that the


interpreter is now ready to evaluate an
expression. 3
For example, it can be used as a desktop
calculator to evaluate simple numeric
expresions:

> 2+3*4
14

> (2+3)*4
20

> sqrt (3^2 + 4^2)


5.0

4
The Standard Prelude

Haskell comes with a large number of


standard library functions. In addition to
the familiar numeric functions such as +
and *, the library also provides many
useful functions on lists.
 Select the first element of a
list:
> head [1,2,3,4,5]
1

5
 Remove the first element from a list:

> tail [1,2,3,4,5]


[2,3,4,5]

 Select the nth element of a list:

> [1,2,3,4,5] !! 2
3

 Select the first n elements of a list:

> take 3 [1,2,3,4,5]


[1,2,3]
6
 Remove the first n elements from a list:

> drop 3 [1,2,3,4,5]


[4,5]

 Calculate the length of a list:

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


5

 Calculate the sum of a list of numbers:

> sum [1,2,3,4,5]


15
7
 Calculate the product of a list of numbers:

> product [1,2,3,4,5]


120

 Append two lists:

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


[1,2,3,4,5]

 Reverse a list:

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


[5,4,3,2,1]
8
Function Application

In mathematics, function application is


denoted using parentheses, and
multiplication is often denoted using
juxtaposition or space.

f(a,b) + c d

Apply the function f to a and b, and


add the result to the product of c and
d.
9
In Haskell, function application is denoted
using space, and multiplication is denoted
using *.

f a b + c*d

As previously, but in Haskell


syntax.

10
Moreover, function application is assumed
to have higher priority than all other
operators.

fa+b

Means (f a) + b, rather than f (a +


b).

11
Examples

Mathematics Haskell

f(x) fx

f(x,y) fxy

f(g(x)) f (g x)

f(x,g(y)) f x (g y)

f(x)g(y) fx*gy
12
Haskell Scripts

 As well as the functions in the standard


library, you can also define your own
functions;

 New functions are defined within a script,


a text file comprising a sequence of
definitions;

 By convention, Haskell scripts usually


have a .hs suffix on their filename. This is
not mandatory, but is useful for 13
My First Script
When developing a Haskell script, it is
useful to keep two windows open, one
running an editor for the script, and the
other running GHCi.

Start an editor, type in the following two


function definitions, and save the script as
test.hs:
double x = x + x

quadruple x = double (double x)


14
Leaving the editor open, in another window
start up GHCi with the new script:

$ ghci test.hs

Now both the standard library and the file


test.hs are loaded, and functions from both
can be used:

> quadruple 10
40

> take (double 2) [1,2,3,4,5,6]


[1,2,3,4]
15
Leaving GHCi open, return to the editor, add
the following two definitions, and resave:

factorial n = product [1..n]

average ns = sum ns `div` length ns

Note:

 div is enclosed in back quotes, not


forward;

 x `f` y is just syntactic sugar for f x y.


16
GHCi does not automatically detect that the
script has been changed, so a reload
command must be executed before the new
definitions can be used:

> :reload
Reading file "test.hs"

> factorial 10
3628800

> average [1,2,3,4,5]


3

17
Command
Useful GHCi Meaning
Commands
:load name load script
name
:reload reload current
script
:set editor name set editor to
name
:edit name edit script
name
:edit edit current script
:type expr show type of expr
:? show all
18
commands
Naming Requirements

 Function and argument names must begin


with a lower-case letter. For example:

myFun fun1 arg_2 x’

 By convention, list arguments usually


have an s suffix on their name. For
example:
xs ns nss

19
The Layout Rule

In a sequence of definitions, each definition


must begin in precisely the same column:

a = 10 a = 10 a = 10

b = 20 b = 20 b = 20

c = 30 c = 30 c = 30

20
The layout rule avoids the need for explicit
syntax to indicate the grouping of
definitions.

a=b+c a=b+c
where where
b=1 means {b = 1;
c=2 c = 2}
d=a*2 d=a*2

implicit explicit
grouping grouping
21
Exercises
Try out slides 2-7 and 13-16 using
(1) GHCi.

(2) Fix the syntax errors in the program


below, and test your solution using
GHCi.

N = a ’div’ length xs
where
a = 10
xs = [1,2,3,4,5]

22
(3) Show how the library function last that
selects the last element of a list can be
defined using the functions introduced
in this lecture.

(4) Can you think of another possible


definition?
Similarly, show how the library function
(5)
init that removes the last element from
a list can be defined in two different
ways.

23

You might also like