Learn Haskell

Preview:

DESCRIPTION

Learn Haskell. Team 404: Team not found By: Rodney Anderson & Jeff Klarfeld. What is Haskell ?!?!?. - PowerPoint PPT Presentation

Citation preview

S

Learn HaskellTeam 404: Team not found

By: Rodney Anderson&

Jeff Klarfeld

What is Haskell ?!?!?

Haskell is a computer programming language. In particular, it is a polymorphically, statically typed, lazy, and a purely functional language. The language is named after Haskell Brooks Curry. Haskell is based on the lambda calculus, hence the Haskell logo.

Haskell Brooks Curry

An American mathematician and logician. He is best known for his work in combinatory logic, as well as Curry’s paradox and the Curry-Howard correspondence. There are 3 programming languages named after him Haskell, Brooks, and Curry, as well as the concept of currying (a technique used for transforming functions in mathematics and computer science). He died 1982.

History Background

In 1985 interest in lazy functional languages grew, and by 1987, more than a dozen non-strict, purely functional programming languages existed. A meeting was held at a conference on Functional Programming Languages and Computer Architecture in Portland. The purpose of the committee was to consolidate the current functional languages into a common one that would serve as a basis for future research in functional language design.

The first version of Haskell (Haskell 1.0) was defined in 1990.

Haskell Compilers

Glasgow Haskell Compiler (GHC) Utrecht Haskell Compiler (UHC) Haskell Dialects Disciple (DDC) York Haskell Compiler (YHC) Helium

Haskell Variable Types

IntegerEx: 1,2,3

CharEx: ‘A’, ‘B’, ‘C’

BoolEx: True, False

StringEx: [‘b’, ‘o’, ‘y’] or “boy”

FloatEx: 1.0 , 1.2, 78.4

TupleEx: ( 1 , True)

Main Features

Lazy Evaluation Pattern Matching List Comprehension Type classes Type polymorphism

Lists

Syntax[] – This is a empty list[1] – This is a list containing only one element “1”[1,2] – This is a list containing two elements[1..10] – This is a list from 1 to 10[1..] – An infinite list starting from 1 to infinity[2,4 ..]- List of even numbers[[1,2],[3,4]] – A List of lists[‘h’,’e’, ‘l’, ‘l’, ‘o’] – A list of Char A string “hello”

Lists in functions let func (a:as) = [1,2,3] 1:[2,3] 1:2:[3] 1:2:3:[]

Lazy Evaluation

Lazy Evaluation means that expressions are not evaluated when they are bound to variables, but their evaluation is deferred until their results are needed by other computations.

Haskell Example: Let x = [1..] – this is an infinite list starting from 1

Pattern Matching

In pattern matching, we attempt to match values against patterns and, if so desired, bind variables to successful matches.

Example: fibonocci fib :: Integer -> Integerfib 0 = 1fib 1 = 1fib (n+2) = fib n + fib (n+1)

-- note n+k pattern only matches a value m >= k, and if it succeeds it binds n to m- k

Pattern Matching Example

patternMatch :: Char -> StringpatternMatch ‘a’ = “This is the letter a”patternMatch ‘b’ = “This is the letter b”patternMatch ‘c’ = “This is the letter c”

Hep :: [ [Char] ] -> [ [Char]]Hep (w:ws) = w:Hep(ws)Hep (“you”:ws) = “u”:Hep(ws);Hep(“are”:ws) = “r”: Hep(ws);Hep ([]) = [];

List Comprehension

List comprehension is similar to set comprehension or set builder notation, in Haskell this notation returns a “set” known as a list. Set comprehension;

S = { 2 * x | x >0 , and x <= 10} where x is an integer = { 2, 4, 6, 8 , 10, 12, 14, 16, 18, 20}

In Haskell the above looks like S :: [Integer] -> [Integer]S (xs) = [ 2 * x | x <- xs, x > 0, x <= 10]

Haskell Programs of List Comprehension

-- This Haskell program adds 1 to a list of IntegersaddOne :: [Integer] -> [Integer] - - declares function addOneaddOne (a:as) = [a +1 | a<- (a:as) ] - - List comprehension

-- map’ this is map primemap’ :: (a -> b) -> [a] -> [b]map’ (f) (as) = [f a | a<- as]

Polymorphism

A value is polymorphic if there is more than one type it can have.

Haskell Example:The function id:: a -> a contains an unconstrained type variable “a” in its type, and so can be used in a context requiring Char->Char or Integer -> Integer or (Integer -> Bool) -> (Integer -> Bool)

Type Classes

A type class is a type system construct that supports ad-hoc polymorphism. This first appeared in Haskell.

Define a type class Eq:Class Eq a where (==) :: a -> a -> Bool(/=) :: a -> a -> Bool

Define a function member of Class Eqmember :: (Eq a) => a-> [a] -> Boolmember y [] = Falsemember y (x:xs) = ( x == y) || member y xs

Static Typing

Static typing has the advantage that errors can be caught before the program runs. Note the programming language C is strongly statically typed.

Haskell Syntactic Sugar

-- This Haskell program takes a list of functions and apply --them to the list .Notice no parenthesis for parameters. applyFunc :: [(a->Bool)] -> [a] -> [Bool] applyFunc fs as = [f a | f <- fs, a<- as]

X `elem` List = elem X List F _ [] : The “_” means the function takes in

anything else that the pattern doesn’t match.

Haskell Recursion

Factorial :: Integer -> Integerfactorial 0 = 1factorial n = n * factorial (n – 1)

factorial (3) = 3 * factorial(2) = 3 * ( 2 * factorial (1) ) = 3 * (2 * (1 * factorial (0) )) = 3 * (2 * (1 * 1)) = 3 * (2 * 1) = 3 * 2 = 6

Haskell Recursion Programs

-- This Haskell program adds 1 to a list of IntegersaddOne :: [Integer] -> [Integer] - - declares function addOneaddOne [] = []addOne (a:as) = a+1: addOne(as)

--map’ this is map primemap’ :: (a -> b) -> [a] -> [b]map’ _ [] = []map’ (f) (a:as) = f (a): map’ (f) (as)

Lambda Functions

A lambda function is an anonymous function, meaning it’s a function without a name.

Haskell Example: -- This function takes in x and y and adds them\x y -> x + y

Use: (\x y -> x + y) 3 5Result Displayed = 8

-- This is a lambda function to add one to a list\(as) -> [a + 1| a <- as]

If Then Else Statements

if – then- else statement syntax:

if a then b else c

Haskell program examplefunct :: Char -> Boolfunct (a) = if a == ‘c’ then True else False

Case

Syntax :case Expression of pattern -> result

pattern -> result pattern -> result

Example:Head’ :: [a] -> a Head’ xs = case xs of [] -> error “No head of list”

(x:_) -> x

Currying

Currying is the process of transforming a function that takes multiple arguments into a function that takes just a single argument and returns another function if any arguments are still needed.

Example: f :: a -> b -> c g is the Curried form => g :: (a , b) -> c

In Haskell all functions are considered curried meaning that all functions take in one argument.

Curry Function

Example:Define: Add2 :: a -> a -> a Add2 (a) (b) = a + b

Add1 :: a -> aAdd1 (a) = Add2 3Use: Add1 4Display: 7

Example 2: max 4 5 when curried is ( max 4) 5

Create Your own Data Type

Data Bool = True | False Data Shape = Circle Float Float Float | Rectangle

Float Haskell Example

surface :: Shape -> Floatsurface ( Circle _ _ r) = pi * r^2surface ( Rectangle x1) = (abs x1)

To write an actual program

Module codeName where import otherCodeName

--define functions Example: myShapes.hs

module myShapes whereimport Shapes

f :: Shapes -> Intf (Circle w x y z ) = 1f (Rectangle x) = 2

Glasgow Haskell Compiler (GHC)

Glasgow Haskell Compiler (GHC)

Why use Haskell ?

Haskell Offers you 1) Substantially increased programmer productivity.2) Shorter, clearer, and more maintainable code.3) Fewer errors, higher reliability4) A smaller “semantic gap” between the programmer and the language.

Why use Haskell ?

Smaller programs: ex: quicksort

quicksort ::Ord a => [a] -> [a] quicksort [] = [] quicksort (p:xs) = ( quicksort lesser) +

+ [p] ++ (quicksort greater)where

lesser = filter (<p) xs greater = filter (>= p) xs

Why use Haskell

Quick Sort in C void qsort( int a[] , int lo, int hi){ int h, l, p, t; if (lo < hi) { l = lo; h = hi; p = a[hi]; do{ while ((l < h) && (a[l] <= p)) {l= l+1;} while ( (h> l) && a[h] >= p)){ h = h-1;}

if ( l < h) { t = a[l]; a[l] = a[h];

a[h] = t; } }while (l < h);a[hi] = a[l];a[l] = p;qsot( a, lo, l-1);qsort( a, l +1, hi);}}

Haskell Applications in Industry

Many Companies have used Haskell for a range of projects:

Google: Internal IT infrastucture

Facebook: Tools

AT&T: Network Security

References

Haskell Applications in Industry http://www.haskell.org/haskellwiki/Haskell_in_industry

Learn how to use Haskellhttp://learnyouahaskell.com/starting-out

Research paper on Haskellhttp://research.microsoft.com/en-us/um/people/simonpj/papers/history-of-haskell/history.pdf

Download Haskellhttp://www.haskell.org/haskellwiki/Haskell

Recommended