Background Constructors (1A) Young Won Lim 6/30/18
|
|
- Moses Strickland
- 5 years ago
- Views:
Transcription
1 Background Constructors (1A)
2 Copyright (c) Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". Please send corrections (or suggestions) to youngwlim@hotmail.com. This document was produced by using OpenOffice.
3 Based on Haskell in 5 steps Constructors 3
4 Advantages of let f :: s -> (a,s) f x = y where y =... x... f :: State s a f = State $ \x -> y where y =... x... Using Control.Monad.State monad will not work, because where refers to the pattern matching f =, where no x is in scope. with let, there is no problem. f :: s -> (a,s) f x = let y =... x... in y f :: State s a f = State $ \x -> let y =... x... in y Constructors 4
5 Advantages of while Because "where" blocks are bound to a syntactic construct, they can be used to share bindings between parts of a function that are not syntactically expressions. f x f x f x = f x = cond1 x = a = let a = w x let a = w x let a = w x cond2 x = g a in case () of in select (f (h x a)) in if cond1 x otherwise = f (h x a) _ cond1 x -> a [(cond1 x, a), then a where cond2 x -> g a (cond2 x, g a)] else if cond2 x a = w x otherwise -> f (h x a) then g a else f (h x a) an expression style a functional equivalent: a series of if-thenelse expressions: These alternatives are arguably less readable and hide the structure of the function more than simply using where. Constructors 5
6 Lambda Lifting let or where can often be implemented using lambda lifting and let floating, incurring at least the cost of introducing a new name. f x cond1 x = a cond2 x = g a otherwise = f (h x a) where a = w x f x = f' (w x) x f' a x cond1 x = a cond2 x = g a otherwise = f (h x a) The auxiliary definition can either be a top-level binding, or included in f using let or where. Constructors 6
7 Problems with where (1) fib = (map fib' [0..]!!) where fib' 0 = 0 fib' 1 = 1 fib' n = fib (n - 1) + fib (n - 2) fib x = map fib' [0..]!! x where fib' 0 = 0 fib' 1 = 1 fib' n = fib (n - 1) + fib (n - 2) the second one runs considerably slower than the first. You may wonder why simply adding an explicit argument to fib (known as eta expansion) degrades performance so dramatically. Constructors 7
8 Problems with where (2) fib = let fib' 0 = 0 fib' 1 = 1 fib' n = fib (n - 1) + fib (n - 2) in (map fib' [0..]!!) fib x = let fib' 0 = 0 fib' 1 = 1 fib' n = fib (n - 1) + fib (n - 2) in map fib' [0..]!! x In the second case, fib' is redefined for every argument x The compiler cannot know whether you intended this while it increases time complexity it may reduce space complexity. Thus it will not float the definition out from under the binding of x. In contrast, in the first function, fib' can be moved to the top level by the compiler. The where clause hid this structure and made the application to x look like a plain eta expansion, which it is not. Constructors 8
9 Data Constructor data Color = Red Green Blue Type Constructor Data Constructors values Red Green Blue is a constructor that contains a value of the type Color. is a constructor that contains a value of the type Color. is a constructor that contains a value of the type Color. Constructors 9
10 Data Constructor with Parameters data Color = RGB Int Int Int Type Constructor type Data Constructors (a function returning a value) RGB is not a value but a function taking three Int s and returning a value RGB :: Int -> Int -> Int -> Color RGB is a data constructor that is a function taking three Int values as its arguments, and then uses them to construct a new value. Constructors 10
11 Type Constructor Consider a binary tree to store Strings data SBTree = Leaf String Branch String SBTree SBTree Type Constructor type Data Constructors (functions returning a value) a type SBTree Leaf Branch is a type is a data constructor (a function) is a data constructor (a function) Leaf :: String -> SBTree Branch :: String -> SBTree -> SBTree -> SBTree Constructors 11
12 Similar Type Constructors Consider a binary tree to store Strings data SBTree = Leaf String Branch String SBTree SBTree Consider a binary tree to store Bool data BBTree = Leaf Bool Branch Bool BBTree BBTree Consider a binary tree to store a parameter type data BTree a = Leaf a Branch a (BTree a) (BTree a) Constructors 12
13 Type Constructor with a Parameter Type constructors Both SBTree and BBTree are type constructors data SBTree = Leaf String Branch String SBTree SBTree data BBTree = Leaf Bool Branch Bool BBTree BBTree data BTree a = Leaf a Branch a (BTree a) (BTree a) Now we introduce a type variable a as a parameter to the type constructor. BTree has become a function. It takes a type as its argument and it returns a new type. Constructors 13
14 Type Constructors and Data Constructors A type constructor a "function" that takes 0 or more types gives you back a new type. type SBTree = BTree String type BBTree = BTree Bool Type constructors with parameters allows slight variations in types A data constructor a "function" that takes 0 or more values gives you back a new value. Data constructors with parameters allows slight variations in values RGB #0c5c1b RGB RGB RGB Constructors 14
15 ( ) ( ) is both a type and a value. ( ) is a special type, pronounced unit, has one value ( ), sometimes pronounced void the unit type has only one value which is called unit. ( ) :: ( ) Type :: Expression It is the same as the void type void in Java or C/C++. Constructors 15
16 Unit Type a unit type is a type that allows only one value (and thus can hold no information). It is the same as the void type void in Java or C/C++. :t Expression :: Type data Unit = Unit Prelude> :t Unit Unit :: Unit Prelude> :t () () :: () Constructors 16
17 Type Language and Expression Language data Tconst Tvar Tvar = Vconst_1 type type Vconst_n type type A new datatype declaration Tconst (Type Constructor) Vconst (Value Constructor) is added to the type language is added to the expression language and its pattern sublanguage must not appear in types argument types in (Tconst Tvar Tvar) can be used as argument types in Vconst type type Constructors 17
18 Datatype Declaration data TypeC Tpar Tpar = ValC type type ValC type type A new datatype declaration The keyword data introduces a new datatype declaration, what the new type is TypeC Tpar Tpar what its values are. ValC type type ValC type type datatype data type type = data Constructors 18
19 Datatype Declaration Examples data Tree a = Leaf Node (Tree a) (Tree a) data Type = Value Tree Leaf or Node (Type Constructor) (Value Constructor) data ( ) = ( ) ( ) (Type Constructor) ( ) (Value Constructor) the type (), often pronounced "Unit" the value (), sometimes pronounced "void" the type () containing only one value () Constructors 19
20 Type Synonyms type String = [Char] phonebook :: [(String,String)] type PhoneBook = [(String,String)] phonebook :: PhoneBook phonebook = [("betty"," "),("bonnie"," "),("patsy"," "),("lucille"," "),("wendy"," "),("penny"," ") ] type PhoneNumber = String type Name = String type PhoneBook = [(Name,PhoneNumber)] phonebook :: PhoneBook Constructors 20
21 Type Synonyms for Functions type Bag a = a -> Int data Gems = Sapphire Emerald Diamond deriving (Show) a -> Int a Int a Bag a Int type Bag a = a -> Int type Bag Int = Int -> Int type Bag Char = Char -> Int Constructors 21
22 Type Synonyms for Functions type Bag a = a -> Int data Gems = Sapphire Emerald Diamond deriving (Show) mybag :: Bag Gems a mybag Int emptybag :: Bag Gems a emptybag Int Constructors 22
23 Type Synonyms for Functions type Bag a = a -> Int data Gems = Sapphire Emerald Diamond deriving (Show) mybag :: Bag Gems a mybag Int mybag Sapphire = 3 mybag Diamond = 2 mybag Emerald = 0 Sapphire Diamond Emerald emptybag :: Bag Gems a emptybag Int emptybag Sapphire = 0 Sapphire 0 emptybag Diamond = 0 Diamond 0 emptybag Emerald = 0 Emerald 0 Constructors 23
24 Toward the Record Syntax data Person = Person String String Int Float String String deriving (Show) let guy = Person "Buddy" "Finklestein" " " "Chocolate" pattern matching functions firstname :: Person -> String firstname (Person firstname _) = firstname lastname :: Person -> String lastname (Person _ lastname ) = lastname age :: Person -> Int age (Person age _) = age height :: Person -> Float height (Person _ height ) = height phonenumber :: Person -> String phonenumber (Person number _) = number flavor :: Person -> String flavor (Person _ flavor) = flavor firstname guy Buddy lastname guy John age guy 43 height guy phonenumber guy flavor guy Chocolate Constructors 24
25 The Record Syntax data Person = Person { fname :: String, lname :: String, age :: Int, ht :: Float, ph :: String, flavor :: String } deriving (Show) let guy = Person { fname="buddy", lname="john", age=43, ht=184.2, ph= , flavor= Orange } accessor functions fname lname age ht ph flavor :: Person -> String :: Person -> String :: Person -> Int :: Person -> Float :: Person -> String :: Person -> String fname guy Buddy lname guy John age guy 43 ht guy ph guy flavor guy Orange Constructors 25
26 The Record Syntax Example data Car = Car String String Int deriving (Show) Car "Ford" "Mustang" 1967 data Car = Car {company :: String, model :: String, year :: Int} deriving (Show) Car {company = "Ford", model = "Mustang", year = 1967} Constructors 26
27 Record Syntax (named field) data Configuration = Configuration { username :: String, localhost :: String, currentdir :: String, homedir :: String, timeconnected :: Integer } username :: Configuration -> String localhost :: Configuration -> String -- etc. -- accessor function (automatic) changedir :: Configuration -> String -> Configuration -- update function changedir cfg newdir = if directoryexists newdir -- make sure the directory exists then cfg { currentdir = newdir } else error "Directory does not exist" Constructors 27
28 newtype and data data newtype data can only be replaced with newtype if the type has exactly one value constructor which can have exactly only one field It ensures that the trivial wrapping and unwrapping of the single field is eliminated by the compiler. (using newtype is faster) Constructors 28
29 data, type, and newtype data State s a = State { runstate :: s -> (s, a) } type State s a = State { runstate :: s -> (s, a) } newtype State s a = State { runstate :: s -> (s, a) } instance : data(o), type(x), newtype(o) overhead : data(o), type(x), newtype(x) Constructors 29
30 Single value constructor with a single field simple wrapper types such as State Monad are usually defined with newtype. type : type synonyms newtype State s a = State { runstate :: s -> (s, a) } A single value constructor : State { runstate :: s -> (s, a) } A single field : { runstate :: s -> (s, a) } Constructors 30
31 Single value constructor with a single field one constructor with one field means that the new type and the type of the field are in direct correspondence (isomorphic) state :: (s -> (a, s)) -> State s a runstate :: State s a -> (s -> (a, s)) (s -> (a, s)) State s a state State s a runstate (s -> (a, s)) after the type is checked at compile time, at run time the two types can be treated identically to declare different type class instances for a particular type, or want to make a type abstract, wrap it in a newtype then distinct to the type-checker but identical at runtime. Constructors 31
32 data, newtype, type data newtype type value constructors : number many only one none value constructors : evaluation lazy strict N/A value constructors : fields many only one none Compilation Time affected affected affected Run Time Overhead runtime overhead none none Created Type a distinct new type a distinct new type a new name Type Class Instances type class instances type class instances no instance Pattern Matching Evaluation at least WHNF no evaluation same as the original Usage a new data type higher level concept higher level concept Constructors 32
33 data data - creates new algebraic type with value constructors can have several value constructors value constructors are lazy values can have several fields affects both compilation and runtime, have runtime overhead created type is a distinct new type can have its own type class instances when pattern matching against value constructors, WILL be evaluated at least to weak head normal form (WHNF) * used to create new data type (example: Address { zip :: String, street :: String } ) Constructors 33
34 newtype newtype - creates new decorating type with value constructor can have only one value constructor value constructor is strict value can have only one field affects only compilation, no runtime overhead created type is a distinct new type can have its own type class instances when pattern matching against value constructor, CAN not be evaluated at all * used to create higher level concept based on existing type with distinct set of supported operations or that is not interchangeable with original type (example: Meter, Cm, Feet is Double) Constructors 34
35 type type - creates an alternative name (synonym) for a type (like typedef in C) no value constructors no fields affects only compilation, no runtime overhead no new type is created (only a new name for existing type) can NOT have its own type class instances when pattern matching against data constructor, behaves the same as original type used to create higher level concept based on existing type with the same set of supported operations (example: String is [Char]) Constructors 35
36 newtype examples newtype Fd = Fd CInt -- data Fd = Fd CInt would also be valid -- newtypes can have deriving clauses just like normal types newtype Identity a = Identity a deriving (Eq, Ord, Read, Show) -- record syntax is still allowed, but only for one field newtype State s a = State { runstate :: s -> (s, a) } -- this is *not* allowed: -- newtype Pair a b = Pair { pairfst :: a, pairsnd :: b } -- but this is: data Pair a b = Pair { pairfst :: a, pairsnd :: b } -- and so is this: newtype NPair a b = NPair (a, b) Constructors 36
37 References [1] ftp://ftp.geoinfo.tuwien.ac.at/navratil/haskelltutorial.pdf [2]
Background Constructors (1A) Young Won Lim 1/22/18
Background Constructors (1A) Copyright (c) 2016-2018 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2
More informationBackground Constructors (1A) Young Won Lim 7/5/18
Background Constructors (1A) Copyright (c) 2016-2018 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2
More informationBackground Constructors (1A) Young Won Lim 7/9/18
Background Constructors (1A) Copyright (c) 2016-2018 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2
More informationMonad Background (3A) Young Won Lim 10/5/17
Copyright (c) 2016-2017 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published
More informationMonad Background (3A) Young Won Lim 11/20/17
Copyright (c) 2016-2017 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published
More informationMonad Background (3A) Young Won Lim 11/8/17
Copyright (c) 2016-2017 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published
More informationMonad Background (3A) Young Won Lim 11/18/17
Copyright (c) 2016-2017 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published
More informationBackground Expressions (1D) Young Won Lim 7/7/18
Background Expressions (1D) Copyright (c) 2016-2018 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2
More informationMonad (1A) Young Won Lim 6/9/17
Copyright (c) 2016-2017 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published
More informationMonad (1A) Young Won Lim 6/21/17
Copyright (c) 2016-2017 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published
More informationMonad (1A) Young Won Lim 6/26/17
Copyright (c) 2016-2017 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published
More informationMonad (3A) Young Won Lim 8/9/17
Copyright (c) 2016-2017 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published
More informationBackground Type Classes (1B) Young Won Lim 6/14/18
Background Type Classes (1B) Copyright (c) 2016-2017 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2
More informationHaskell Overview III (3A) Young Won Lim 10/4/16
(3A) Copyright (c) 2016 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published
More informationBackground Type Classes (1B) Young Won Lim 6/28/18
Background Type Classes (1B) Copyright (c) 2016-2017 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2
More informationState Monad (3D) Young Won Lim 8/31/17
Copyright (c) 2016-2017 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published
More informationMonad Overview (3B) Young Won Lim 1/16/18
Based on Haskell in 5 steps https://wiki.haskell.org/haskell_in_5_steps 2 Copyright (c) 2016-2018 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of
More informationHaskell Overview II (2A) Young Won Lim 8/9/16
(2A) Copyright (c) 2016 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published
More informationSide Effects (3B) Young Won Lim 11/20/17
Side Effects (3B) Copyright (c) 2016-2017 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later
More informationBackground Operators (1E) Young Won Lim 7/7/18
Background Operators (1E) Copyright (c) 2016-2018 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2
More informationSide Effects (3A) Young Won Lim 1/13/18
Side Effects (3A) Copyright (c) 2016-2018 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later
More informationHaskell Overview IV (4A) Young Won Lim 10/13/16
(4A) Copyright (c) 2016 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published
More informationMaybe Monad (3B) Young Won Lim 1/3/18
Copyright (c) 2016-2017 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published
More informationHaskell Overview IV (4A) Young Won Lim 10/24/16
(4A) Copyright (c) 2016 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published
More informationGHCi: Getting started (1A) Young Won Lim 5/31/17
GHCi: Getting started (1A) Copyright (c) 2016-2017 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2
More informationGHCi: Getting started (1A) Young Won Lim 6/3/17
GHCi: Getting started (1A) Copyright (c) 2016-2017 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2
More informationMaybe Monad (3B) Young Won Lim 12/21/17
Copyright (c) 2016-2017 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published
More informationSide Effects (3B) Young Won Lim 11/23/17
Side Effects (3B) Copyright (c) 2016-2017 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later
More informationSide Effects (3B) Young Won Lim 11/27/17
Side Effects (3B) Copyright (c) 2016-2017 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later
More informationGHCi: Getting started (1A) Young Won Lim 5/26/17
GHCi: Getting started (1A) Copyright (c) 2016-2017 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2
More informationG Programming Languages Spring 2010 Lecture 6. Robert Grimm, New York University
G22.2110-001 Programming Languages Spring 2010 Lecture 6 Robert Grimm, New York University 1 Review Last week Function Languages Lambda Calculus SCHEME review 2 Outline Promises, promises, promises Types,
More informationPolymorphism Overview (1A) Young Won Lim 2/20/18
Polymorphism Overview (1A) Copyright (c) 2016-2017 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2
More informationHaskell Overview II (2A) Young Won Lim 8/23/16
(2A) Copyright (c) 2016 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published
More informationApplicatives Comparisons (2C) Young Won Lim 3/6/18
Comparisons (2C) Copyright (c) 2016-2018 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later
More informationTyped Racket: Racket with Static Types
Typed Racket: Racket with Static Types Version 5.0.2 Sam Tobin-Hochstadt November 6, 2010 Typed Racket is a family of languages, each of which enforce that programs written in the language obey a type
More informationPart 1. An Implementation of the Gale-Shapley Algorithm
Part 1 An Implementation of the Gale-Shapley Algorithm CSCI 3110 Code Fall 2015 1 Introduction Here s the pseudo-code of the Gale-Shapley algorithm from class: GALESHAPLEY(M, W ) while there is an unmarried
More informationTyped Scheme: Scheme with Static Types
Typed Scheme: Scheme with Static Types Version 4.1.1 Sam Tobin-Hochstadt October 5, 2008 Typed Scheme is a Scheme-like language, with a type system that supports common Scheme programming idioms. Explicit
More informationIO Monad (3C) Young Won Lim 1/6/18
Copyright (c) 2016-2018 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published
More informationState Monad Examples (6C) Young Won Lim 9/26/18
State Monad s (6C) Copyright (c) 2016-2018 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any
More informationIO Monad (3C) Young Won Lim 8/23/17
Copyright (c) 2016-2017 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published
More informationClass (1A) Young Won Lim 9/8/14
Class (1A) Copyright (c) 2011-2013 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version
More informationIO Monad (3D) Young Won Lim 1/18/18
Copyright (c) 2016-2018 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published
More informationCSCE 314 Programming Languages
CSCE 314 Programming Languages Haskell: Declaring Types and Classes Dr. Hyunyoung Lee 1 Outline Declaring Data Types Class and Instance Declarations 2 Defining New Types Three constructs for defining types:
More informationJVM ByteCode Interpreter
JVM ByteCode Interpreter written in Haskell (In under 1000 Lines of Code) By Louis Jenkins Presentation Schedule ( 15 Minutes) Discuss and Run the Virtual Machine first
More informationHaskell Overview II (2A) Young Won Lim 9/26/16
(2A) Copyright (c) 2016 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published
More informationCS 440: Programming Languages and Translators, Spring 2019 Mon 2/4
Haskell, Part 5 CS 440: Programming Languages and Translators, Spring 2019 Mon 2/4 More Haskell Miscellaneous topics Simple I/O, do blocks, actions Modules data vs type declaration Instances of classtypes
More informationHaske k ll An introduction to Functional functional programming using Haskell Purely Lazy Example: QuickSort in Java Example: QuickSort in Haskell
Haskell An introduction to functional programming using Haskell Anders Møller amoeller@cs.au.dk The most popular purely functional, lazy programming language Functional programming language : a program
More informationThe Typed Racket Guide
The Typed Racket Guide Version 5.3.6 Sam Tobin-Hochstadt and Vincent St-Amour August 9, 2013 Typed Racket is a family of languages, each of which enforce
More informationWeiss Chapter 1 terminology (parenthesized numbers are page numbers)
Weiss Chapter 1 terminology (parenthesized numbers are page numbers) assignment operators In Java, used to alter the value of a variable. These operators include =, +=, -=, *=, and /=. (9) autoincrement
More informationA Sudoku Solver (1A) Richard Bird Implementation. Young Won Lim 11/15/16
A Sudoku Solver (1A) Richard Bird Implementation Copyright (c) 2016 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License,
More informationAn introduction introduction to functional functional programming programming using usin Haskell
An introduction to functional programming using Haskell Anders Møller amoeller@cs.au.dkau Haskell The most popular p purely functional, lazy programming g language Functional programming language : a program
More informationOverview (1A) Young Won Lim 9/25/17
Overview (1A) Copyright (c) 2009-2017 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later
More informationAccessibility (1A) Young Won Lim 8/22/13
Accessibility (1A) Copyright (c) 2011-2013 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any
More informationOverloading, Type Classes, and Algebraic Datatypes
Overloading, Type Classes, and Algebraic Datatypes Delivered by Michael Pellauer Arvind Computer Science and Artificial Intelligence Laboratory M.I.T. September 28, 2006 September 28, 2006 http://www.csg.csail.mit.edu/6.827
More informationCSCE 314 TAMU Fall CSCE 314: Programming Languages Dr. Flemming Andersen. Haskell Functions
1 CSCE 314: Programming Languages Dr. Flemming Andersen Haskell Functions 2 Outline Defining Functions List Comprehensions Recursion 3 Conditional Expressions As in most programming languages, functions
More informationIntroduction to Programming Using Java (98-388)
Introduction to Programming Using Java (98-388) Understand Java fundamentals Describe the use of main in a Java application Signature of main, why it is static; how to consume an instance of your own class;
More informationA Sudoku Solver Pruning (3A)
A Sudoku Solver Pruning (3A) Richard Bird Implementation Copyright (c) 2016 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation
More informationPointers (1A) Young Won Lim 3/5/18
Pointers (1A) Copyright (c) 2010-2018 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later
More informationIntroduction to Haskell
Introduction to Haskell Matt Mullins Texas A&M Computing Society October 6, 2009 Matt Mullins (TACS) Introduction to Haskell October 6, 2009 1 / 39 Outline Introduction to Haskell Functional Programming
More informationState Monad (3D) Young Won Lim 9/25/17
Copyright (c) 2016-2017 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published
More informationProgramming Languages Fall 2013
Programming Languages Fall 2013 Lecture 2: types Prof. Liang Huang huang@qc.cs.cuny.edu Recap of Lecture 1 functional programming vs. imperative programming basic Haskell syntax function definition lazy
More informationHaskell Making Our Own Types and Typeclasses
Haskell Making Our Own Types and Typeclasses http://igm.univ-mlv.fr/~vialette/?section=teaching Stéphane Vialette LIGM, Université Paris-Est Marne-la-Vallée January 13, 2015 Making Our Own Types and Typeclasses
More informationOverview (1A) Young Won Lim 9/14/17
Overview (1A) Copyright (c) 2009-2017 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later
More informationCS 457/557: Functional Languages
CS 457/557: Functional Languages Lists and Algebraic Datatypes Mark P Jones Portland State University 1 Why Lists? Lists are a heavily used data structure in many functional programs Special syntax is
More informationState Monad Examples (6C) Young Won Lim 9/22/18
State Monad s (6C) Copyright (c) 2016-2018 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any
More informationTypeScript. Types. CS144: Web Applications
TypeScript Superset of JavaScript (a.k.a. JavaScript++) to make it easier to program for largescale JavaScript projects New features: types, interfaces, decorators,... All additional TypeScript features
More informationOverview (1A) Young Won Lim 9/9/17
Overview (1A) Copyright (c) 2009-2017 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later
More informationProgramming in Haskell Aug Nov 2015
Programming in Haskell Aug Nov 2015 LECTURE 23 NOVEMBER 12, 2015 S P SURESH CHENNAI MATHEMATICAL INSTITUTE Summary of IO Actions of type IO t1, t1 -> IO t2, t1 -> t2 -> IO t3 etc. As opposed to pure functions
More informationType system. Type theory. Haskell type system. EDAN40: Functional Programming Types and Type Classes (revisited)
Type system EDAN40: Functional Programming Types and Type Classes (revisited) Jacek Malec Dept. of Computer Science, Lund University, Sweden April 3rd, 2017 In programming languages, a type system is a
More informationFunction Overview (1A) Young Won Lim 10/23/17
Function Overview (1A) Copyright (c) 2010 2017 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or
More informationLibraries (1A) Young Won Lim 6/5/17
Libraries (1A) Copyright (c) 2016-2017 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later
More informationDesign Issues. Subroutines and Control Abstraction. Subroutines and Control Abstraction. CSC 4101: Programming Languages 1. Textbook, Chapter 8
Subroutines and Control Abstraction Textbook, Chapter 8 1 Subroutines and Control Abstraction Mechanisms for process abstraction Single entry (except FORTRAN, PL/I) Caller is suspended Control returns
More informationPointers (1A) Young Won Lim 1/9/18
Pointers (1A) Copyright (c) 2010-2017 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later
More informationPointers (1A) Young Won Lim 1/5/18
Pointers (1A) Copyright (c) 2010-2017 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later
More informationQUIZ. 1. Explain the meaning of the angle brackets in the declaration of v below:
QUIZ 1. Explain the meaning of the angle brackets in the declaration of v below: This is a template, used for generic programming! QUIZ 2. Why is the vector class called a container? 3. Explain how the
More informationBackground Functions (1C) Young Won Lim 4/3/18
Background Functions (1C) Copright (c) 2016-2017 Young W. Lim. Permission is granted to cop, distribute and/or modif this document under the terms of the GNU Free Documentation License, Version 1.2 or
More informationPointers (1A) Young Won Lim 11/1/17
Pointers (1A) Copyright (c) 2010-2017 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later
More informationFunctional Programming. Overview. Topics. Recall λ-terms. Examples
Topics Functional Programming Christian Sternagel Harald Zankl Evgeny Zuenko Department of Computer Science University of Innsbruck WS 2017/2018 abstract data types, algebraic data types, binary search
More informationHaskell & functional programming, some slightly more advanced stuff. Matteo Pradella
Haskell & functional programming, some slightly more advanced stuff Matteo Pradella pradella@elet.polimi.it IEIIT, Consiglio Nazionale delle Ricerche & DEI, Politecnico di Milano PhD course @ UniMi - Feb
More informationUMBC CMSC 331 Final Exam
UMBC CMSC 331 Final Exam Name: UMBC Username: You have two hours to complete this closed book exam. We reserve the right to assign partial credit, and to deduct points for answers that are needlessly wordy
More informationn n Try tutorial on front page to get started! n spring13/ n Stack Overflow!
Announcements n Rainbow grades: HW1-6, Quiz1-5, Exam1 n Still grading: HW7, Quiz6, Exam2 Intro to Haskell n HW8 due today n HW9, Haskell, out tonight, due Nov. 16 th n Individual assignment n Start early!
More informationFundamental Concepts and Definitions
Fundamental Concepts and Definitions Identifier / Symbol / Name These terms are synonymous: they refer to the name given to a programming component. Classes, variables, functions, and methods are the most
More informationFunctions (4A) Young Won Lim 5/8/17
Functions (4A) Copyright (c) 2015 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version
More informationBackground Functions (1C) Young Won Lim 5/26/18
Background Functions (1C) Copright (c) 2016-2018 Young W. Lim. Permission is granted to cop, distribute and/or modif this document under the terms of the GNU Free Documentation License, Version 1.2 or
More informationTypes and Type Inference
CS 242 2012 Types and Type Inference Notes modified from John Mitchell and Kathleen Fisher Reading: Concepts in Programming Languages, Revised Chapter 6 - handout on Web!! Outline General discussion of
More informationArrays (1A) Young Won Lim 12/4/17
Arrays (1A) Copyright (c) 2009-2017 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version
More informationCS 440: Programming Languages and Translators, Spring 2019 Mon
Haskell, Part 4 CS 440: Programming Languages and Translators, Spring 2019 Mon 2019-01-28 More Haskell Review definition by cases Chapter 6: Higher-order functions Revisit currying map, filter Unnamed
More informationMonad P1 : Several Monad Types (4A) Young Won Lim 2/13/19
Monad P1 : Several Copyright (c) 2016-2019 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any
More informationCSC324 Principles of Programming Languages
CSC324 Principles of Programming Languages http://mcs.utm.utoronto.ca/~324 November 21, 2018 Last Class Types terminology Haskell s type system Currying Defining types Value constructors Algebraic data
More informationCSCE 314 Programming Languages
CSCE 314 Programming Languages Final Review Part I Dr. Hyunyoung Lee 1 Programming Language Characteristics Different approaches to describe computations, to instruct computing devices E.g., Imperative,
More informationLecture 19: Functions, Types and Data Structures in Haskell
The University of North Carolina at Chapel Hill Spring 2002 Lecture 19: Functions, Types and Data Structures in Haskell Feb 25 1 Functions Functions are the most important kind of value in functional programming
More informationINTRODUCTION TO HASKELL
INTRODUCTION TO HASKELL PRINCIPLES OF PROGRAMMING LANGUAGES Norbert Zeh Winter 2018 Dalhousie University 1/81 HASKELL: A PURELY FUNCTIONAL PROGRAMMING LANGUAGE Functions are first-class values: Can be
More informationCSCE 314 Programming Languages. Type System
CSCE 314 Programming Languages Type System Dr. Hyunyoung Lee 1 Names Names refer to different kinds of entities in programs, such as variables, functions, classes, templates, modules,.... Names can be
More informationApplications of Pointers (1A) Young Won Lim 12/26/17
Applications of (1A) Copyright (c) 2010-2017 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any
More informationShell CSCE 314 TAMU. Haskell Functions
1 CSCE 314: Programming Languages Dr. Dylan Shell Haskell Functions 2 Outline Defining Functions List Comprehensions Recursion 3 Conditional Expressions As in most programming languages, functions can
More informationHaskell 5.1 INTERACTIVE SESSIONS AND THE RUN-TIME SYSTEM
5 Haskell Haskell is a lazy, functional programming language that was initially designed by a committee in the eighties and nineties. In contrast to many programming languages, it is lazy, meaning that
More informationThe Complexity of Algorithms (3A) Young Won Lim 4/3/18
Copyright (c) 2015-2018 Young W. Lim. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published
More informationG Programming Languages - Fall 2012
G22.2110-003 Programming Languages - Fall 2012 Lecture 4 Thomas Wies New York University Review Last week Control Structures Selection Loops Adding Invariants Outline Subprograms Calling Sequences Parameter
More informationSet Haskell Exercises
Set Haskell Exercises Young W. Lim 2018-11-20 Tue Young W. Lim Set Haskell Exercises 2018-11-20 Tue 1 / 71 Outline 1 Based on 2 Pardoxes and Haskell type system Using STAL.hs Paradox Types and Type Classes
More informationHaskell Overloading (1) LiU-FP2016: Lecture 8 Type Classes. Haskell Overloading (3) Haskell Overloading (2)
Haskell Overloading (1) LiU-FP2016: Lecture 8 Type Classes Henrik Nilsson University of Nottingham, UK What is the type of (==)? E.g. the following both work: 1 == 2 a == b I.e., (==) can be used to compare
More information