30 November 2018
I maintain these notes as text in the Pandoc’s dialect of Markdown using embedded LaTeX markup for the mathematical formulas and then translate the notes to HTML, PDF, and other formats as needed.
Browser Advisory: The HTML version of this document requires use of a browser that supports the display of MathML. A good choice as of November 2018 is a recent version of Firefox from Mozilla.
Textbook: Exploring Languages with Interpreters and Functional Programming
[HTML] [PDF]
Other free Haskell reference materials:
Haskell Wikibook, 2018.
Miron Lipovaca. Learn You a Haskell for Great Good: A Beginner’s Guide, a free online tutorial at http://learnyouahaskell.com/. (It is also in print from No Starch Press, 2011).
Discuss Evolution of Programming Languages (Chapter 1):
[HTML] [PDF]
(22 Aug) Section 1.2, Evolving Computing Hardware Affects Programming Languages:
[HTML slides]
(22, 24 Aug) Section 1.3, History of Programming Languages:
[HTML slides]
Discuss Programming Paradigms (Chapter 2):
[HTML] [PDF]
(24, 27, 29 Aug) Programming Paradigms:
[HTML slides]
Discuss First Haskell Programs (Chapter 4):
[HTML] [PDF]
(31 Aug) First Haskell Functions:
[HTML slides]
(31 Aug, 5 Sep) Use Factorial functions in GHCi demonstration:
[Factorial.hs
module] [TestFactorial.hs
module] [xfact.hs
demo script]
Covered Section 4.3. “Using the Glasgow Haskell Compiler (GHC)” interactively in GHCi demonstration
(5 Sep) Discuss Assignment #1: [HTML] [PDF].
Posted to website and announced via email on 2 Sep.
See the solution on the Blackboard site.
Examine Haskell Types (Chapter 5) and programming basics:
[HTML] [PDF]
(5, 7 Sep) Demonstrate Haskell types and programming using part of Quick Overview of Basic Haskell:
[Haskell code]
(reference) Type System Concepts:
[HTML slides]
(5, 7 Sep) Discuss Section 5.3 indirectly via the interactive demonstration above. (No slides yet.) Students should read chapter.
Discuss Procedural Abstraction (Chapter 6):
[HTML] [PDF]
(10 Sep) Using Top-Down Stepwise Refinement:
[HTML slides] [Sqrt.hs
module] [TestSqrt.hs
module]
(10, 12 Sep) Modular Design and Programming:
[HTML slides]
Discuss Data Abstraction:
[HTML] [PDF]
(12, 14 Sep) Using Data Abstraction: [HTML slides]
[RationalCore.hs
module] [Rational1.hs
module] [RationalDeferGCD.hs
module] [Rational2.hs
module]
(for reference) Notes on Data Abstraction
Discuss Recursion Styles and Efficiency (Chapter 9):
[HTML] [PDF]
(19 Sep) Review for Examination #1
(21 Sep) Give Examination #1 over ELIFP Chapters 1-2, 4-7, 9
Discuss List Programming (Chapter 13):
[HTML] [PDF]
(24, 28 Sep, 1 Oct) (HTML) List Programming
Above slides cover Section 5.2.5 and part of the evaluation model from Chapter 8
(26 Sep) Go over graded Examination #1
See solution on the Blackboard site.
(1 Oct) Distribute and discuss Assignment #2 (WWM Point-of-Purchase Project)
Discuss Infix Operators and List Examples (Chapter 14):
[HTML] [PDF]
Discuss Higher-Order Functions (Chapter 15):
[HTML] [PDF]
(10 Oct) Demonstrate higher-order Haskell programming using exercises from Chapter 15.
Discuss Haskell Function Concepts (Chapter 16):
[HTML] [PDF]
Discuss Higher-Order Function Examples (Chapter 17):
[HTML] [PDF]
Discuss More List Processing (Chapter 18):
[HTML] [PDF]
(22?? Oct) Distribute and discuss Assignment #3 (Carrie’s Candy Bowl)
(22 Oct) Review for Exam #2
(24 Oct) Give Examination #2 primarily covering ELIFP Chapters 13-18
Discuss Algebraic Data Types (Chapter 21):
[HTML] [PDF]
(31 Oct) Return and discuss graded Examination #2
See solution on the Blackboard site.
Explore Overloading and Type Classes (Chapter 22):
[HTML] [PDF]
(2, 5 Nov) Overloading and Type Classes
(for reference) Typeclassopedia by Brent Yorgey
(5, 7 Nov) Movable Objects case study
(7 Nov) Distribute and discuss Assignment #4, ExamDSL Project
Base Code: [ExamDSL_base.hs] [SimpleHTML.hs]
See solution on the Blackboard site.
(for reference) Domain-specific languages and similar Sandwich DSL case study
Survey language processing concepts (Chapter 40):
[HTML] [PDF]
See the excerpts from Scott’s PLP and Mitchell’s CiPL textbooks on the Blackboard site.
(9, 12 Nov) Compilation and interpretation (for Scott textbook)
Explore the ELI Calculator language concrete syntax (Chapter 41):
[HTML] [PDF]
Explore the ELI Calculator language abstract syntax & evaluation (Chapter 42):
[HTML] [PDF]
Explore the ELI Calculator language modular structure (Chapter 43):
[HTML] [PDF]
(16 Nov) Give Examination #3 primarily covering ELIFP chapters 21-22 and 40-43
(19-23 Nov) Enjoy Fall Break!
(26 Nov) Discuss Assignment #5 (optional) — extending the ELI Calculator language interpreter:
[HTML] [PDF]
I posted this to the website and announced in email on 17 November.
(26, 30? Nov) Explore the ELI Calculator language parsing (Chapter 44):
[HTML] [PDF]
(28 Nov) Return and discuss Examination #3
See solution on the Blackboard site.
(30 Nov) Review for Final Exam
(5 Dec, 8:00-11:00 a.m.) Examination #4 (Final Exam) covering all work during semester
(Not used 2018) Discuss Object-Based Paradigms (Chapter 3):
[HTML] [PDF]
Note: I covered this chapter in the Python-based CSci 556 Multiparadigm Programming class in Fall 2018.
(Not used 2018) Study the Evaluation Model (Chapter 8):
[HTML] [PDF]
(Not used 2018) Discuss Software Testing Concepts (Chapter 11):
[HTML] [PDF]
Note: I covered this chapter in the Python-based CSci 556 Multiparadigm Programming class in Fall 2018. I paired it with a Python 3 example that used Pytest.
(Not used 2018) Consider Testing Haskell Programs (Chapter 12):
[HTML] [PDF]
Note: I covered this chapter some in the Python-based CSci 556 Multiparadigm Programming class in Fall 2018.
(Not used 2018) Revisit Data Abstraction (Chapter 23):
[HTML] [PDF]
Note: See Labelled Digraph Case Study below
(Not used 2018) Explore Parser Combinators (Chapter 45):
[HTML] [PDF]
(Not used 2018) Explore the ELI Calculator language Compilation (Chapter 46):
[HTML] [PDF]
(Not used 2018) Examine the ELI Imperative Core language interpreter (future Chapter 47?)
Code in work:
(for reference) Notes on Scala for Java Programmers
(for reference) Examine the Labeled Digraph case study
Note: The Haskell version has been incorporated in ELIFP Chapter 23.
Background (These notes have not been updated to use Haskell. Some material has also been incorporated into ELIFP chapters 6, 7, and 23.
Haskell version (Spring 2015)
Description of Labeled Digraph abstract data type in Haskell
Haskell List implementation (Spring 2015):
[module] [incomplete test module]
Haskell Map implementation (Spring 2015):
[module] [incomplete test module]
Elixir version (Spring 2015)
Scala versions (Spring 2016)
Abstract data type specification and Scala trait (interface):
[ADT interface]
Scala List implementation:
[class source] [test source]
Scala Map (HashMap) implementation:
[class source] [test source]
Using the Elixir Digraph ADT module to build the Wizard’s Adventure game (Spring 2015)
Wizard’s Adventure game, Version 1, adapted from Chapter 5, 6, and 17 of Conrad Barski’s Land of Lisp: Learn to Program in Lisp, One Game at a Time, No Starch Press, 2011.
Wizard’s Adventure game, Version 2, that uses a higher order function to generate game actions and improved handling of the game state.
(Used 2016) Study Names, Scopes, and Bindings from Scott’s PLP textbook Chapter 3: slides
(Used 2016) Study Subroutines and Control Abstractions from Scott’s PLP textbook Chapter 9: slides
(Used 2016) Introduce Lua programming language
Reference: Roberto Ierusalimshcy. Programming in Lua, Fourth Edition, Lua.org, Rio de Janiero, Brazil, 2016. The First Edition of this book is available online at https://www.lua.org/pil/contents.html; it covers Lua 5.0.
Background: The slides below are adapted, in part, from Programming in Lua, Slides for Course by Fabio Mascarenhas from the Federal University of Rio de Janeiro, Brazil. He taught a course, which used Lua 5.2, at Nankai University, P. R. China, in July 2013.
Introduction to Lua slides based, in part, on Mascarenhas slide sets 0-5
Concepts: Lua design principles, REPL, chunk, script, data types and operators (e.g., nil
, boolean
, number
, string
, table
, function
), dynamic vs. static typing, first-class functions (first-class, anonymous, variadic, multiple return), statements (multiple assignment, if
, while
, repeat
, numeric for
, generic for
, do
), tables (as array, matrix, record, set)
Advanced Lua Functions slides based, in part, on Mascarenhas slide set 6
Concepts: lexical scope, higher-order functions, closure, callback, functional programming (map
, filter
, folds) Currying, partial application
Modules in Lua slides based, in part, on Mascarenhas slide set 9
Concepts: module, information hiding, interface, abstract interface, module and interface design criteria, Lua module implementation
Lua Metatables slides based, in part, on Mascarenhas slide set 10
Concepts: metatable; metamethod; Lua metatable & metamethod-related functions; shared metatable; overriding operation behavior; use of metamethods such as __add
, __len
, __eq
, __lt
, __le
, __index
, __newindex
, and __tostring
; proxy tables example
Lua Objects slides based, in part, on Mascarenhas slide set 11
Concepts: a simple Lua object model; Lua tables as objects; method; receiver object; colon method call operator; self; syntactic sugar; Lua classes as modules; using metatables and metamethod __index
to construct classes and superclasses; constructor; class method; instance method; examples of classes and superclasses; instance-of;
Harold Abelson and Gerald J. Sussman with Julie Sussman. Structure and Interpretation of Computer Programs, Second Edition, MIT Press, 1996. [HTML book]
William R. Cook. Anatomy of Programming Languages online draft
Shiram Krishnamurthi. Programming Languages: Application and Interpretation, online book
Fabio Mascarenhas. Programming in Lua, Slides for Course, Federal University of Rio de Janeiro, Brazil, July 2013. This course was delivered at Nankai University, P. R. China, in July 2013 using Lua 5.2.
Roberto Ierusalimshcy. Programming in Lua, First Edition, Lua.org, Rio de Janiero, Brazil, 2003. This old edition at https://www.lua.org/pil/contents.html covers Lua 5.0.
Penlight Lua Libraries inspired by the Python standard libraries
Love 2D game framework
Awesome Elm tutorial list
School of Haskell online tutorials
Miron Lipovaca. Learn You a Haskell for Great Good: A Beginner’s Guide, a free online tutorial at http://learnyouahaskell.com/. (It is also in print from No Starch Press, 2011.)
H. Conrad Cunningham. Introduction to Functional Programming Using Haskell, Computer and Information Science, University of Mississippi, 2016 (partial draft), available from the prototype CSci 555 course site at http://www.cs.olemiss.edu/~hcc/csci555/prototype/. I begin developing this set of notes in June 2016 based partly on previous materials.
H. Conrad Cunningham. Notes on Functional Programming with Haskell, Computer and Information Science, University of Mississippi, 1994-2014. This older document is being revised and integrated with other materials to produce the document Introduction to Functional Programming Using Haskell.
Kees Doets and Jan van Eijck. The Haskell Road to Logic, Math and Programming, March 2004. This book is also available in print, published by College Publications, 2004.
Paul Hudak. The Haskell School of Music: From Signals to Symphonies, Version 2.6, January 2014. This book is a recent rewrite of Hudak’s The Haskell School of Expression: Learning Functional Programming through Multimedia, Cambridge University Press, 2000.
Patrick Blackburn, Johan Bos, and Kristina Striegnitz. Learn Prolog Now. This a tutoral available online at http://www.learnprolognow.org/. It is also available in print from College Publications, 2006.