Transcript
Page 1: Functional programming seminar (haskell)

Functional Programming

Seminar (Haskell)- BIKRAM THAPA (245066)

Page 2: Functional programming seminar (haskell)

Today’s Seminar Contents

A) Introduction To Functional Programming And Haskell, Features, Application

B) Getting Started With Haskell, Prerequisites

C) Types And Type Classes

Page 3: Functional programming seminar (haskell)

Quick Review of Functional Programming

Programming paradigm that treats computation as evaluation of mathematical functions.

Avoids change of states and mutable data.

The output value of function only depends on the arguments that are input to functions,

same output if function is called twice.

One of the main idea is eliminating side effects

Roots back from the lambda calculus since 1930

Many functional programming languages based on lambda calculus principles

Purely functional PL are Largely emphasized in academic learning rather than commercial development however semi function languages have been commonly used in industrial software development.

Eg. Lips, fp, ML Haskell etc.

Page 4: Functional programming seminar (haskell)

Why functional programming

A journal By John Hughes http://worrydream.com/refs/Hughes-WhyFunctionalProgrammingMatters.pdf

Based on the original source of “Chalmers memo”

From “Research Topics in Functional Programming” ed. D. Turner, Addison-Wesley, 1990,

Few questions –How can we cope with the size and complexity of modern computer programs?How can we reduce the time and cost of program development?How to be confident that finished programs work correctly?

Approaches – Design new language that supportsPrograms can be written clearly, concisely and at high level of abstraction.Supports reusable software components.Rapid prototyping and powerful problem solving.Modularity support.

So functional programming evolves from these concepts.

Java

sum= 0;

for (i = 1; i 10; ++i)

sum= sum+i;

Functional style

Sum[1..10]

Page 5: Functional programming seminar (haskell)

Historical Background 1930, Alonzo Church developed the lambda calculus, a simple but

powerful theory of functions.

1950, John McCarthy developed Lisp, the first functional language, with some influences from the lambda calculus, but retaining variable assignments.

1960, Peter Landin developed ISWIM, the first pure functional language, based strongly on the lambda calculus, with no assignments.

1970, John Backus developed FP, a functional language that emphasizes higher-order functions and reasoning about programs.

1970-1980, David Turner developed a number of lazy functional languages, culminating in the Miranda system.

1987, An international committee of researchers initiated the development of Haskell, a standard lazy functional language.

Page 6: Functional programming seminar (haskell)

Haskell

Purely functional, general-purpose, strong static typing Language

Haskell began in 1987 when a committee of researchers got together to design a kick-ass language

2003, Haskell Report was published, that defined as stable version

Various versions - until 1990, Version 1.0 - 1.4- 1997, Haskell 98- 2006, Haskell prime- 2010, Haskell 2010

Some features - like Haskell can take infinite list,- Lazy evaluation, statically typed, lots of errors are caught on compile time- Pattern Matching- Function as first class citizen- immutability etc.

Page 7: Functional programming seminar (haskell)

Current application of Haskell ABN AMRO Amsterdam, The Netherlands, For Investment Banking activities

Aetion Technologies LLC, Columbus, Ohio , artificial Intelligence

Alcatel-Lucent, have used Haskell to prototype narrowband software radio systems, running in (soft) real-time

AT&T, Haskell is being used in the Network Security division to automate processing of internet abuse complaints.

Bank of America Merril Lynch, Haskell is being used for backend data transformation and loading.

Facebook, Facebook uses some Haskell internally for tools. lex-pass is a tool for programmatically manipulating a PHP code base via Haskell.

More - https://www.haskell.org/haskellwiki/Haskell_in_industry

Web Frameworks, -Yesod, Happstack, Snap etc.

Page 8: Functional programming seminar (haskell)

Getting started With HaskellWhat do we need for HASKELL..?

- A Text editor and a Compiler

- GHC, Haskell compiler

- GHCI, GHC Interactive mode

- GHC can be downloaded from https://haskell.org/

- GHC Can take .hs file , extension , and compile it.

- After installation to start -> Type ghci on terminal

Page 9: Functional programming seminar (haskell)

Some mostly used GHCI Commands GHCI Lets several commands to interpret with the GHC Compiler.

The library file Prelude.hs provides a large number of standard functions. In addition to the familiar numeric functions such as + and *, the library also provides many useful functions on lists.

GHCI Commands always starts with “:”

Some of the important commands are

:l – it loads the .hs file eg. :l myhaskellFile.hs

:r – it reloads the Haskell file :r myhaskellFile.hs

:help, :? – help

:add - adds module

:quit – quits GHCI

: show modules – lists loaded modules

More - https://downloads.haskell.org/~ghc/7.6.3/docs/html/users_guide/ghci-commands.html

Page 10: Functional programming seminar (haskell)

Simple expressions and functions

- what if you try –> 2 * -2, well that error, we should write as -> 2 * (-2)

Page 11: Functional programming seminar (haskell)

Boolean Algebra and Equality operation

5 + “mystring" or 5 == true?

well it will throw error as type does not match.

Page 12: Functional programming seminar (haskell)

Calling out some pre built functions Haskell provides some predefined functions like min, max, succ etc.

Page 13: Functional programming seminar (haskell)

Defining custom Functions Lets create 1.hs and inside it write code as

cubeit x = x * x * x

And save as 1.hs, now on ghci load as -> :l 1 and call function as ->

cubeit 3

Page 14: Functional programming seminar (haskell)

Some examples of writing functions

Mathematics Haskell

f(x)

f(x,y)

f(g(x))

f(x,g(y))

f(x)g(y)

f x

f x y

f (g x)

f x (g y)

f x * g y

Page 15: Functional programming seminar (haskell)

So lets modify the above code as

Page 16: Functional programming seminar (haskell)

If statements in Haskell

if else if else

Page 17: Functional programming seminar (haskell)

Case in Haskell

Page 18: Functional programming seminar (haskell)

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

Function naming convention

Page 19: Functional programming seminar (haskell)

Lists in Haskell

- homogenous data structure

- various operations can be don with lists like

- Accessing the element of list

Page 20: Functional programming seminar (haskell)

A list can be a collection of list

Like arithmetic various operations can be performed with lists

Haskell also provides predefined functions for list like

- head [5,4,3,2,1] => 5

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

- last [5,4,3,2,1] => 1- init [5,4,3,2,1] => [5,4,3,2]

some other are – reverse, length, null, maximum, minimum, sum etc.

Page 21: Functional programming seminar (haskell)

Some mathematical Interpretation

Haskell interpretation of the equation

Page 22: Functional programming seminar (haskell)

Tuples in Haskell

Looks similar to lists but there is difference. Haskell List can have

infinite elements or can have one element.

Tuples is used when we know how many elements we want to

include. Lists of numbers can contain list of number.

Haskell lists can contain any types of elements but type and number

of elements in tuples has to be know

Eg. (1, true, 3, 5)

Tuples can also contain a collection of tuples.

Similar to lists tuples functions can be applied to tuples as well like

fst(1,2,4) => 1snd(5,6) => 6

Page 23: Functional programming seminar (haskell)

Type and Type classes Static type->expression known at compile time -> safer code

It has type inference, like if we write number we don’t have to tell it’s number

A type is a name for a collection of related values. For example, in Haskell the

basic type

For eg. Boolean can contain two values true, false

Applying function to one or more argument of wrong type causes type error. Eg.

If evaluating an expression e would produce a value of type t, then e has type t,

written

Every well formed expression has a type, which can be automatically

calculated at compile time using a process called type inference.

> 1 + False , Error

e :: t

Page 24: Functional programming seminar (haskell)

Finding types in Haskell

Basic Types in Haskell

Bool - logical values

Char - single characters

Integer - arbitrary-precision integers

Float - floating-point numbers

String - strings of characters

Int - fixed-precision integers

:t command tells the type

-> :: is has type of

-> so ‘a’ :: Char => a has type of char

Page 25: Functional programming seminar (haskell)

List type in Haskell

A list is sequence of values of the same type:

[False,True,False] :: [Bool]

[’a’,’b’,’c’,’d’] :: [Char]

The type of a list says nothing about its length:

=> The type of the elements is unrestricted. For example, we can have lists of lists:

[[’a’],[’b’,’c’]] :: [[Char]]

Page 26: Functional programming seminar (haskell)

Tuple Types

A tuple is a sequence of values of different types:

(False,True) :: (Bool,Bool)

(False,’a’,True) :: (Bool,Char,Bool)

The type of a tuple encodes its size:

(False,True) :: (Bool,Bool)

(False,True,False) :: (Bool,Bool,Bool)

(’a’,(False,’b’)) :: (Char,(Bool,Char))

(True,[’a’,’b’]) :: (Bool,[Char])

The type of the components is unrestricted:

Page 27: Functional programming seminar (haskell)

Basic Usage

=> Shows type of Int->Int->Int->int

=> Here, it is mapping of three integer inputs to one integer output

=> The first three Int tells that it takes 3 integer inputs and the last Int is an output

of integer type.

Type Variables

What if we enter => :t head

=> Well that [a] is not a type. Type always begin with Capital letter. So it’s type

variable that means it can be of any type.

Page 28: Functional programming seminar (haskell)

User Defined types and Type class

We can define our own types in Haskell using a data declaration,

e.g. data bool = True | False

data color = Red | Green | Blue

Both Bool and Color are examples of enumerated types,

since they consist of a finite number of nullary data constructors.

=> a type class is a type system construct that supports ad hoc polymorphism(Kind of

polymorphism In which polymorphic function can be applied to arguments of

different type)

What if you type ..

ghci> :t (==)

(==) :: (Eq a) => a -> a -> Bool

==, +, *, -, / are functions,

Everything before the => symbol is called a class constraint. the equality

function takes any two values that are of the same type and returns a

Bool and type of two values must be a member of Eq class.

Page 29: Functional programming seminar (haskell)

Some Basic Type classes

EQ => used for types that support equality. The functions its members implement are == and /=.

So if there's an Eq class constraint for a type variable in a function, it uses == or /= somewhere

inside its definition

Ord is for types that have an ordering. Covers comparing functions like > < = >= <= or

LT GT EQ

Page 30: Functional programming seminar (haskell)

Basic Class types continued..

Show It takes a value whose type is a member of Show and presents it to us as a string

Read is sort of the opposite typeclass of Show. The read function takes a string and

returns a type which is a member of Read.

Page 31: Functional programming seminar (haskell)

Enum members are sequentially ordered types — they can be enumerated. The main

advantage of the Enum typeclass is that we can use its types in list ranges. Types in this

class: (), Bool, Char, Ordering, Int, Integer, Float and Double

Bounded members have an upper and a lower bound.

Others are Num, integral and floating.

Page 32: Functional programming seminar (haskell)

EndReferences

http://learnyouahaskell.com/

http://Haskell.org/


Top Related