Programming Languages
|
|
- Sabrina Williams
- 5 years ago
- Views:
Transcription
1 Programming Languages Andrea Flexeder Chair for Theoretical Computer Science Prof. Seidl TU München winter term 2010/2011
2 Lecture 10 Side-Effects
3 Main Points you should get: Why monads? What is a monad? How to use a monad?
4 C : Lazy evaluation and side-effects static bool LessThanThirty(int x) { Console.Write(" <0>? Less than 30;",x); return x < 30; } static bool MoreThanTwenty(int x) { Console.Write(" <0>? More than 20;",x); return x > 20; } var q0 = from x in new[] <1,25,40,5,23> where LessThanThirty(x) select x; var q1 = from x in q0 where MoreThanTwenty(x) select x; foreach (var r in q1) Console. WriteLine("[<0>];",r);
5 C : Lazy evaluation and side-effects Output: 1? Less than 30; 1? More than 20; 25? Less than 30; 25? More than 20; 40? Less than 30; 5? Less than 30;...
6 Haskell lessthanthirty x = do {putstrln (( show x) ++ " less than 30?"); return (x < 30) } morethantwenty x = do {putstrln (( show x) ++ " more than 20?"); return (x > 20) } q0 = [x x <- [1, 25, 50, 5, 23], lessthanthirty x] q1 = [x x <- q0, morethantwenty x] Couldn t match expected type Bool against inferred type IO Bool In the expression: morethantwenty 20 In a stmt of a list comprehension: morethantwenty 20 In the expression: [x x q0, morethantwenty 20]
7 Side-Effects Effect besides producing a value, modifying some state, observable interaction with world/functions e.g. global state, exception handling, I/O, non-determinism,... control flow matters! Control Flow order in which actions/function calls are evaluated
8 Discussion two ways of approaching effects in functional programming: 1. reference cells, sequence operator, functions with side-effect val x = ref 0 x :=!x +1 print x e.g. Standard ML
9 Discussion two ways of approaching effects in functional programming: 1. reference cells, sequence operator, functions with side-effect val x = ref 0 x :=!x +1 print x e.g. Standard ML 2. monads aim: integrate impure side-effects into a pure functional language e.g. Haskell
10 Monadic Style Characteristics: make explicit sequence in which actions take place allows I/O operations in presence of laziness usage of state dealing with global data objects crosscutting concerns: debugging, exception handling, etc. concept from category theory idea of E. Moggi (mathematical formalisation) structuring denotational semantics translated to functional programming by P. Wadler alternative to CPS
11 echo :: IO () echo = getchar >>= putchar IO Example (1)
12 IO Example (1) echo :: IO () echo = getchar >>= putchar echotwice :: IO () echotwice = echo >> echo echodup :: IO () echodup = getchar >>= \c -> putchar c >> putchar c
13 IO Example (2) gettwochars :: IO (Char, Char) gettwochars = getchar >>= \c1 -> getchar >>= \c2 ->???????
14 IO Example (2) gettwochars :: IO (Char, Char) gettwochars = getchar >>= \c1 -> getchar >>= \c2 -> return (c1,c2)
15 IO Monad type constructor IO denotes computations interacting with operating system return :: a IO a (>>=) :: IO a (a IO b) IO b interpretation of type IO a: computation with I/O and a return value of type a return value of a computation should only be used in further computations and not as return value of a function!
16 Basic Definition type class Monad for monads with methods return and bind (>>=) type constructor m generation of a monad return :: Monad m => a m a takes some value x yields a monadic operation having only x as return value composition of monadic computations (>>=) :: Monad m => m a (a m b) m b 2nd computation uses return value of 1st computation return value is return value of 2nd computation
17 Monad Class type constructor class class Monad m :: (* *) where (>>=) :: forall a b. m a (a m b) m b (>>) :: forall a b. m a m b m b (return) :: forall a. a m a (fail) :: String m a m >> k = m >>= \ k fail s = error s
18 Do Notation (Example) fun a = return a >>= (\b (f b >>= (\c g b c) )) in do-notation: fun b = do { c f b; g b c } equivalent to: fun b = do c f b g b c
19 Do Notation (Example) fun a = return a >>= (\b (f b >>= (\c g b c) )) in do-notation: fun b = do { c f b; g b c } equivalent to: fun b = do c f b g b c each line in do-notation creates a new scope: fun r = do x f r x g x x h x return x fun r = f r >>= ((\x g x) >>= ((\x h x) >>= (\x return x)))
20 Do Notation each e >>= \x... becomes x e;... each e >>... becomes e;... e1 >>= \x1 e2 >>= \x2 e3 >> e4 >>= \x4 e5
21 Do Notation each e >>= \x... becomes x e;... each e >>... becomes e;... e1 >>= \x1 e2 >>= \x2 e3 >> e4 >>= \x4 e5 equivalent to: do x1 e1; x2 e2; e3; x4 e4; e5
22 IO Example (2) in Do-Notation gettwochars :: IO (Char, Char) gettwochars = getchar >>= \c1 -> getchar >>= \c2 -> return (c1,c2) gettwochars :: IO (Char,Char) gettwochars = do { c1 <- getchar ; c2 <- getchar ; return (c1,c2) }
23 IO in Haskell entire Haskell program is wrapped inside the IO monad main program is an action of type IO () example: main :: IO () main = do putstr "Your name: " x <- getline putstr ("Hello "++ x ++".\n") -- equivalent to main1 = putstr "Your name:" >>= \x -> getline >>= \x -> putstr ("Hello "++ x ++".\n") reconcile effects and referential transparency, laziness disciplined way to encapsulate states (imperative style)
24 Monadic Laws guarantee that monadic composition is associative and has left and right unit 1. (return a) >>= f = f a - - left unit 2. m >>= return = m - - right unit 3. (m >>= f ) >>= g = m >>= (\x f x >>= g) - - associativity
25 Monadic Laws guarantee that monadic composition is associative and has left and right unit 1. (return a) >>= f = f a - - left unit 2. m >>= return = m - - right unit 3. (m >>= f ) >>= g = m >>= (\x f x >>= g) - - associativity (>>=) and return satisfy the laws of a monad: return v >>= \x m = m[x:=v] m >>= \x return x = m (m >>= \x n) >>= \y o = m >>= \x (n >>= \y o)
26 Monoid algebraic structure (M,, u): operator ( ), value u, set M operator has the value as identity u x = x x u = x operator is associative ( x y ) z = x (y z)
27 Monoid algebraic structure (M,, u): operator ( ), value u, set M operator has the value as identity u x = x x u = x operator is associative ( x y ) z = x (y z) monoid examples: (N 0, +, 0) (Z, +, 0) (N,, 1) (Σ, concat, ɛ) (a, (++), [ ])
28 Overview some instances of monads: IO Identity Exception State Maybe List
29 Example: Interpreter Modularity and Extensibility: Example: Interpreter combination of interpreter and background information enriched by following background info: 1. no: identity monad 2. errors: exception monad 3. operation counter: state monad
30 Modification environment contains computations instead of values type Env = [(Variable, M Value)] update :: Env Variable M Value Env replacing each function of type a b by a function of type a M b functions eval, add, mylookup have to be modified!
31 Identity Monad module MonIdent where newtype I a = I a deriving Show instance Monad I where return x = I x (I x) >>= f = f x fail i = error "lookup failed" printout :: Show a => I a -> String printout (I x) = show x
32 Exceptions Exceptions mechanism for interrupting normal control flow in program signalling exceptional condition exception: typed, diagnostic identifier 1. typed: you can define your own kinds of exception 2. diagnostic: you can tell something about the error
33 Exceptions Realisation function f returns something or fails possibility 1: return Nothing possibility 2: wrap every function application in a case to find out whether result is returned or exception possibility 3: mechanism in language exception mechanisms: 1. exit(1) / atexit(...) 2. goto 3. setjmp/longjmp 4. raise/jump (catch/throw) and variations 5. callcc continuations
34 Exceptions - Order matters! example: int i =..., j =...; malloc (512MB/i);... int k = i/j; situation: 1. allocation fail and 2. division by zero
35 Exceptions - Order matters! example: int i =..., j =...; malloc (512MB/i);... int k = i/j; situation: 1. allocation fail and 2. division by zero Attention: user might be interested in order of errors! 1. scenario1: division by zero prior to allocation fail assumption: i=0 trying to allocate memory 1 error 2. scenario2: allocation fail prior to division by zero assumption: < 512/i RAM available j=0 2 errors
36 Exception Monad module MonError where data E a = Error String Ok a deriving Show instance Monad E where return x = Ok x m >>= f = case m of Error s -> Error s Ok x -> f x fail s = Error s printout :: Show a => E a -> String printout (Error s) = "Error: "++ s printout (Ok x) = "Ok: " ++ show x
37 Modelling State aim: providing operations for 1. specifying an initial state, 2. querying current state and 3. changing it state transformer: function of type s (a, s) mapping an initial state to a result value paired with the final state data ST s a = ST (s (a,s)) once constructed, transformers of states of different type are obtained
38 State Monad module MonStateTrans where data ST s a = ST { unst::(s -> (a,s)) } instance Monad (ST s) where return x = ST (\s -> (x,s)) m >>= f = ST (\s -> let (x1,s1) = unst m s (x2,s2) = unst (f x1) s1 in (x2,s2)) fail x = error "lookup failed" printout :: Show a => M a -> String printout m = case unst m 0 of (a,s) -> "Count: " ++ show s ++ ", Value: " ++ show a
39 Main Points: Why monads? neatly integrate side-effects into a pure functional language What is a monad? < M, return, <<= > How to use a monad? replace functions of type a b by those of type a M b
40 Conclusion benefits of monads: introduce effects (e.g. state, concurrency,... ) and retain laziness and referential transparency mix imperative + purely functional programming all laws of functional programming remain unconditionally valid separation of concerns (values are distinguished from computations of values) monadic style offers a new way of thinking about how to structure code possibility of proving properties exploiting the monad laws
41 More... many other features with monads: monad transformers allow the features of different monads to be combined monadic parser combinators additive monads (MonadPlus) Reader/Writer monad interface to code written in other languages continuations...
42 Further Reading Fundamentalist Functional Programming PL book chapters A Gentle Introduction to Haskell 98 chapters 7,9 The essence of functional programming by Phil Wadler Monads for functional programming by Phil Wadler
Haskell Monads CSC 131. Kim Bruce
Haskell Monads CSC 131 Kim Bruce Monads The ontological essence of a monad is its irreducible simplicity. Unlike atoms, monads possess no material or spatial character. They also differ from atoms by their
More informationInformatics 1 Functional Programming 19 Tuesday 23 November IO and Monads. Philip Wadler University of Edinburgh
Informatics 1 Functional Programming 19 Tuesday 23 November 2010 IO and Monads Philip Wadler University of Edinburgh The 2010 Informatics 1 Competition Sponsored by Galois (galois.com) List everyone who
More informationReferences. Monadic I/O in Haskell. Digression, continued. Digression: Creating stand-alone Haskell Programs
References Monadic I/O in Haskell Jim Royer CIS 352 March 6, 2018 Chapter 18 of Haskell: the Craft of Functional Programming by Simon Thompson, Addison-Wesley, 2011. Chapter 9 of Learn you a Haskell for
More informationCS The IO Monad. Slides from John Mitchell, K Fisher, and S. Peyton Jones
CS 242 2012 The IO Monad Slides from John Mitchell, K Fisher, and S. Peyton Jones Reading: Tackling the Awkward Squad, Sections 1-2 Real World Haskell, Chapter 7: I/O Beauty... Functional programming is
More informationInformatics 1 Functional Programming Lectures 15 and 16. IO and Monads. Don Sannella University of Edinburgh
Informatics 1 Functional Programming Lectures 15 and 16 IO and Monads Don Sannella University of Edinburgh Part I The Mind-Body Problem The Mind-Body Problem Part II Commands Print a character putchar
More informationPrinciples of Programming Languages
Principles of Programming Languages h"p://www.di.unipi.it/~andrea/dida2ca/plp- 15/ Prof. Andrea Corradini Department of Computer Science, Pisa Monads in Haskell The IO Monad Lesson 27! 1 Pros of FuncConal
More informationI/O in Purely Functional Languages. Stream-Based I/O. Continuation-Based I/O. Monads
I/O in Purely Functional Languages Stream-Based I/O Four centuries ago, Descartes pondered the mind-body problem: how can incorporeal minds interact with physical bodies? Designers of purely declarative
More informationPROGRAMMING IN HASKELL. Chapter 10 - Interactive Programming
PROGRAMMING IN HASKELL Chapter 10 - Interactive Programming 0 Introduction To date, we have seen how Haskell can be used to write batch programs that take all their inputs at the start and give all their
More informationCSCE 314 Programming Languages. Interactive Programming: I/O
CSCE 314 Programming Languages Interactive Programming: I/O Dr. Hyunyoung Lee 1 Introduction To date, we have seen how Haskell can be used to write batch programs that take all their inputs at the start
More informationSoftware System Design and Implementation
Software System Design and Implementation Controlling Effects Gabriele Keller The University of New South Wales School of Computer Science and Engineering Sydney, Australia COMP3141 18s1 Examples of effects
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 informationEmbedded Domain Specific Languages in Idris Lecture 3: State, Side Effects and Resources
Embedded Domain Specific Languages in Idris Lecture 3: State, Side Effects and Resources Edwin Brady (ecb10@st-andrews.ac.uk) University of St Andrews, Scotland, UK @edwinbrady SSGEP, Oxford, 9th July
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 informationApplicative, traversable, foldable
Applicative, traversable, foldable Advanced functional programming - Lecture 3 Wouter Swierstra 1 Beyond the monad So far, we have seen how monads define a common abstraction over many programming patterns.
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 informationApplicative, traversable, foldable
Applicative, traversable, foldable Advanced functional programming - Lecture 4 Wouter Swierstra and Alejandro Serrano 1 Beyond the monad So far, we have seen how monads define a common abstraction over
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 informationMostly functional programming does not work
Mostly functional programming does not work Alejandro Gómez-Londoño EAFIT University June 26, 2014 Introduction Conventional programming languages are large, complex, and inflexible. Their limited expressive
More informationI/O in Haskell. To output a character: putchar :: Char -> IO () e.g., putchar c. To output a string: putstr :: String -> IO () e.g.
I/O in Haskell Generally, I/O functions in Haskell have type IO a, where a could be any type. The purpose and use of a will be explained later. We call these commands or actions, for we think of them as
More informationPrinciples of Programming Languages
Principles of Programming Languages h"p://www.di.unipi.it/~andrea/dida2ca/plp-16/ Prof. Andrea Corradini Department of Computer Science, Pisa Monads in Haskell The IO Monad Lesson 23! 1 Pros of FuncConal
More informationMonad class. Example: Lambda laughter. The functional IO problem. EDAN40: Functional Programming Functors and Monads
Monad class EDAN40: Functional Programming Functors and Monads Jacek Malec Dept. of Computer Science, Lund University, Sweden April 23rd, 2018 Motivation: Separation of pure and impure code Properties
More informationEECS 700 Functional Programming
EECS 700 Functional Programming Dr. Andy Gill University of Kansas February 16, 2010 1 / 41 Parsing A parser is a program that analyses a piece of text to determine its syntactic structure. The expression
More informationMonads. Functional Programming (CS4011) Monads
Monads Functional Programming (CS4011) Andrew Butterfield Glenn Strong Foundations & Methods Group, Discipline of Software Systems Trinity College, University of Dublin {Andrew.Butterfield,Glenn.Strong}@cs.tcd.ie
More informationG Programming Languages - Fall 2012
G22.2110-003 Programming Languages - Fall 2012 Lecture 3 Thomas Wies New York University Review Last week Names and Bindings Lifetimes and Allocation Garbage Collection Scope Outline Control Flow Sequencing
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 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 information7. Introduction to Denotational Semantics. Oscar Nierstrasz
7. Introduction to Denotational Semantics Oscar Nierstrasz Roadmap > Syntax and Semantics > Semantics of Expressions > Semantics of Assignment > Other Issues References > D. A. Schmidt, Denotational Semantics,
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 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 informationAdvanced Programming Handout 7. Monads and Friends (SOE Chapter 18)
Advanced Programming Handout 7 Monads and Friends (SOE Chapter 18) The Type of a Type In previous chapters we discussed: Monomorphic types such as Int, Bool, etc. Polymorphic types such as [a], Tree a,
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 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 informationIntroduction to Functional Programming in Haskell 1 / 56
Introduction to Functional Programming in Haskell 1 / 56 Outline Why learn functional programming? The essence of functional programming What is a function? Equational reasoning First-order vs. higher-order
More informationINTRODUCTION TO FUNCTIONAL PROGRAMMING
INTRODUCTION TO FUNCTIONAL PROGRAMMING Graham Hutton University of Nottingham adapted by Gordon Uszkay 1 What is Functional Programming? Opinions differ, and it is difficult to give a precise definition,
More informationHarvard School of Engineering and Applied Sciences CS 152: Programming Languages
Harvard School of Engineering and Applied Sciences CS 152: Programming Languages Lecture 18 Thursday, March 29, 2018 In abstract algebra, algebraic structures are defined by a set of elements and operations
More informationCS 242. Fundamentals. Reading: See last slide
CS 242 Fundamentals Reading: See last slide Syntax and Semantics of Programs Syntax The symbols used to write a program Semantics The actions that occur when a program is executed Programming language
More informationMore on functional programming
More on functional programming Emphasis on Haskell (as a pure functional language) Input and output in Haskell Wrappers / contexts Monads chaining wrapped computations Maybe and lists as monads Return
More informationCollege Functors, Applicatives
College 2016-2017 Functors, Applicatives Wouter Swierstra with a bit of Jurriaan Hage Utrecht University Contents So far, we have seen monads define a common abstraction over many programming patterns.
More informationModules Matter Most. Robert Harper Carnegie Mellon University. MacQueen Fest Chicago May 2012
Modules Matter Most Robert Harper Carnegie Mellon University MacQueen Fest Chicago May 2012 Thanks... to the organizers for organizing this meeting.... to Dave for being an inspiration to and influence
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 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 informationAn introduction to functional programming. July 23, 2010
An introduction to functional programming July 23, 2010 About Outline About About What is functional programming? What is? Why functional programming? Why? is novel. is powerful. is fun. About A brief
More informationFunctional Programming
Functional Programming Monadic Prelude Jevgeni Kabanov Department of Computer Science University of Tartu Introduction Previously on Functional Programming Monadic laws Monad class (>>= and return) MonadPlus
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 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 informationHaskell. COS 326 Andrew W. Appel Princeton University. a lazy, purely functional language. slides copyright David Walker and Andrew W.
Haskell a lazy, purely functional language COS 326 Andrew W. Appel Princeton University slides copyright 2013-2015 David Walker and Andrew W. Appel Haskell Another cool, typed, functional programming language
More informationAssigning to a Variable
What is the result of this program? Is it 0 or 1? Assigning to a Variable let f = proc(x) set x = 1 in let y = 0 in { (f y); y } 1 Assigning to a Variable let f = proc(x) set x = 1 in let y = 0 in { (f
More informationParsing. Zhenjiang Hu. May 31, June 7, June 14, All Right Reserved. National Institute of Informatics
National Institute of Informatics May 31, June 7, June 14, 2010 All Right Reserved. Outline I 1 Parser Type 2 Monad Parser Monad 3 Derived Primitives 4 5 6 Outline Parser Type 1 Parser Type 2 3 4 5 6 What
More informationMonads. Mark Hills 6 August Department of Computer Science University of Illinois at Urbana-Champaign
Monads Mark Hills mhills@cs.uiuc.edu Department of Computer Science University of Illinois at Urbana-Champaign 6 August 2009 Hills Monads 1 / 19 Overview Overview Hills Monads 2 / 19 Why Monads? Overview
More informationUsing Monads for Input and Output
L13-1 Using Monads for Input and Output Jan-Willem Laboratory for Computer Science M.I.T. November 4, 2002 Functional Languages and I/O L13-2 z := f(x) + g(y); In a functional language f and g can be evaluated
More informationConcepts of Programming Languages
Concepts of Programming Languages Lecture 15 - Functional Programming Patrick Donnelly Montana State University Spring 2014 Patrick Donnelly (Montana State University) Concepts of Programming Languages
More informationf() ! " Run a higher-priority task? ! " Yield the processor to another task because our ! " Use the processor for some other activity while
CS 410/510: Advanced Programming Continuing a Computation: Continuations Mark P Jones Portland State University 1 Standard nested function call pattern 2 Continuing a Computation: What might we want to
More informationCS 410/510: Advanced Programming
CS 410/510: Advanced Programming Continuations Mark P Jones Portland State University 1 Continuing a Computation: f() g() h() Standard nested function call pattern 2 Continuing a Computation: f() g() h()
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 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 informationAbout the Tutorial. Audience. Prerequisites. Copyright & Disclaimer. Haskell Programming
About the Tutorial Haskell is a widely used purely functional language. Functional programming is based on mathematical functions. Besides Haskell, some of the other popular languages that follow Functional
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 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 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 informationTackling the Awkward Squad: monadic input/output, concurrency, exceptions, and foreign-language calls in Haskell
Tackling the Awkward Squad: monadic inputoutput, concurrency, exceptions, and foreign-language calls in Haskell Simon PEYTON JONES Microsoft Research, Cambridge simonpj@microsoft.com http:research.microsoft.comuserssimonpj
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 informationM-Structures (Continued)
M-Structures (Continued) plus Introduction to the I/O Monad Arvind Computer Science and Artificial Intelligence Laboratory M.I.T. October 24, 2006 October 24, 2006 http://www.csg.csail.mit.edu/6.827 L12-1
More informationCS 457/557: Functional Languages
CS 457/557: Functional Languages I/O Actions in Haskell Mark P Jones Portland State University 1 Question: If functional programs don t have any side-effects, then how can we ever do anything useful? 2
More informationValue Recursion in Monadic Computations
Value Recursion in Monadic Computations Levent Erkök OGI School of Science and Engineering, OHSU Advisor: John Launchbury June 24th, 2002 Outline Recursion and effects Motivating examples Value recursion
More informationProgramming Languages Third Edition
Programming Languages Third Edition Chapter 12 Formal Semantics Objectives Become familiar with a sample small language for the purpose of semantic specification Understand operational semantics Understand
More informationExample: A Compiler Fragment (1) Example: A Compiler Fragment (2) Example: A Compiler Fragment (3)
LiU-FP2016: Lecture 7 Monads Henrik Nilsson University of Nottingham, UK Example: A Compiler Fragment (1) Identification is the task of relating each applied identifier occurrence to its declaration or
More informationLECTURE 16. Functional Programming
LECTURE 16 Functional Programming WHAT IS FUNCTIONAL PROGRAMMING? Functional programming defines the outputs of a program as a mathematical function of the inputs. Functional programming is a declarative
More informationCS 11 Haskell track: lecture 1
CS 11 Haskell track: lecture 1 This week: Introduction/motivation/pep talk Basics of Haskell Prerequisite Knowledge of basic functional programming e.g. Scheme, Ocaml, Erlang CS 1, CS 4 "permission of
More informationINF 212 ANALYSIS OF PROG. LANGS FUNCTION COMPOSITION. Instructors: Crista Lopes Copyright Instructors.
INF 212 ANALYSIS OF PROG. LANGS FUNCTION COMPOSITION Instructors: Crista Lopes Copyright Instructors. Topics Recursion Higher-order functions Continuation-Passing Style Monads (take 1) Identity Monad Maybe
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 informationOverview. Declarative Languages. General monads. The old IO monad. Sequencing operator example. Sequencing operator
Overview Declarative Languages D7012E: General monads in haskell Fredrik Bengtsson IO-monad sequencing operator monad class requirements on monad Monadic computation trivial example useful example The
More informationProgramming Paradigms
PP 2017/18 Unit 11 Functional Programming with Haskell 1/37 Programming Paradigms Unit 11 Functional Programming with Haskell J. Gamper Free University of Bozen-Bolzano Faculty of Computer Science IDSE
More informationMulti-paradigm Declarative Languages
Michael Hanus (CAU Kiel) Multi-paradigm Declarative Languages ICLP 2007 1 Multi-paradigm Declarative Languages Michael Hanus Christian-Albrechts-University of Kiel Programming Languages and Compiler Construction
More informationHaskell: From Basic to Advanced. Part 2 Type Classes, Laziness, IO, Modules
Haskell: From Basic to Advanced Part 2 Type Classes, Laziness, IO, Modules Qualified types In the types schemes we have seen, the type variables were universally quantified, e.g. ++ :: [a] -> [a] -> [a]
More informationCIS552: Advanced Programming
CIS552: Advanced Programming Handout 8 What is a Parser? A parser is a program that analyzes a piece of text to deine its structure (and, typically, returns a tree representing this structure). The World
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 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 informationTrees. Solution: type TreeF a t = BinF t a t LeafF 1 point for the right kind; 1 point per constructor.
Trees 1. Consider the following data type Tree and consider an example inhabitant tree: data Tree a = Bin (Tree a) a (Tree a) Leaf deriving Show tree :: Tree Int tree = Bin (Bin (Bin Leaf 1 Leaf ) 2 (Bin
More informationPart VI. Imperative Functional Programming
Part VI Imperative Functional Programming Chapter 14 Mutable Storage MinML is said to be a pure language because the execution model consists entirely of evaluating an expression for its value. ML is
More informationProgramming language design and analysis
Programming language design and analysis Introduction Marius Minea 25 September 2017 Why this course? Programming languages are fundamental and one of the oldest CS fields Language design is an important
More informationThe story so far. Elements of Programming Languages. While-programs. Mutable vs. immutable
The story so far Elements of Programming Languages Lecture 12: Imperative programming James Cheney University of Edinburgh November 4, 2016 So far we ve mostly considered pure computations. Once a variable
More informationMonads and all that III Applicative Functors. John Hughes Chalmers University/Quviq AB
Monads and all that III Applicative Functors John Hughes Chalmers University/Quviq AB Recall our expression parser expr = do a
More informationMonads. COS 441 Slides 16
Monads COS 441 Slides 16 Last time: Agenda We looked at implementation strategies for languages with errors, with printing and with storage We introduced the concept of a monad, which involves 3 things:
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 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 informationFunctional Programming
Functional Programming Björn B. Brandenburg The University of North Carolina at Chapel Hill Based in part on slides and notes by S. Olivier, A. Block, N. Fisher, F. Hernandez-Campos, and D. Stotts. Brief
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 informationCOP4020 Programming Languages. Functional Programming Prof. Robert van Engelen
COP4020 Programming Languages Functional Programming Prof. Robert van Engelen Overview What is functional programming? Historical origins of functional programming Functional programming today Concepts
More informationIntroduction to Functional Programming and Haskell. Aden Seaman
Introduction to Functional Programming and Haskell Aden Seaman Functional Programming Functional Programming First Class Functions Expressions (No Assignment) (Ideally) No Side Effects Different Approach
More informationRelation Overriding. Syntax and Semantics. Simple Semantic Domains. Operational Semantics
SE3E03, 2006 1.59 61 Syntax and Semantics Syntax Shape of PL constructs What are the tokens of the language? Lexical syntax, word level How are programs built from tokens? Mostly use Context-Free Grammars
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 informationCONVENTIONAL EXECUTABLE SEMANTICS. Grigore Rosu CS422 Programming Language Design
CONVENTIONAL EXECUTABLE SEMANTICS Grigore Rosu CS422 Programming Language Design Conventional Semantic Approaches A language designer should understand the existing design approaches, techniques and tools,
More informationImperative Functional Programming
Imperative Functional Programming Uday S. Reddy Department of Computer Science The University of Illinois at Urbana-Champaign Urbana, Illinois 61801 reddy@cs.uiuc.edu Our intuitive idea of a function is
More informationMonads à la Mode. 1 Introduction. 2 Motivation. 2.1 On Termination. 2.2 Continuation-Passing Style. 2.4 Reconciling Styles. 2.3 Store-Passing Style
1 Introduction Monads à la Mode Cameron Swords The purpose of this article is to provide a concise introduction to monads for anyone who has an understanding of Scheme and simple types. It provides a motivation
More informationSome Advanced ML Features
Some Advanced ML Features Mooly Sagiv Michael Clarkson, Cornell CS 3110 Data Structures and Functional Programming University of Washington: Dan Grossman ML is small Small number of powerful constructs
More informationPARALLEL AND CONCURRENT PROGRAMMING IN HASKELL
Introduction Concurrent Haskell Data Parallel Haskell Miscellenous References PARALLEL AND CONCURRENT PROGRAMMING IN HASKELL AN OVERVIEW Eva Burrows BLDL-Talks Department of Informatics, University of
More informationMonads. Bonus lecture 2017 David Sands
Monads Bonus lecture 2017 David Sands Our version of the story, so far. Monad is the class of instructions. Instructions can be built using do notation. We have seen two kinds of instructions i.e. two
More informationThoughts on Assignment 4 Haskell: Flow of Control
Thoughts on Assignment 4 Haskell: Flow of Control CS F331 Programming Languages CSCE A331 Programming Language Concepts Lecture Slides Monday, February 27, 2017 Glenn G. Chappell Department of Computer
More informationMonads in Haskell. Nathanael Schilling. December 12, 2014
Monads in Haskell Nathanael Schilling December 12, 2014 Abstract In Haskell, monads provide a mechanism for mapping functions of the type a -> m b to those of the type m a -> m b. This mapping is dependent
More informationCS252 Advanced Programming Language Principles. Prof. Tom Austin San José State University Fall 2013
CS252 Advanced Programming Language Principles Prof. Tom Austin San José State University Fall 2013 What are some programming languages? Why are there so many? Different domains Mobile devices (Objective
More information