16 April 2018
Copyright (C) 2016-2018, H. Conrad Cunningham
Acknowledgements: I adapted and revised much of this work in Summer and Fall 2016 and Spring 2017 from my previous materials. I added new materials in Spring and Summer 2017. This is an ongoing effort that will continue through at least Fall 2018.
In Spring 2018, I linked in modified Programming Paradigms and Abstraction documents that will be included in a future draft of this material. I also changed to my new working title for this work.
I maintain these notes as text in 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.
Advisory: The HTML version of this document requires use of a browser that supports the display of MathML. A good choice as of April 2018 is a recent version of Firefox from Mozilla.
Partially reorganized material in Spring 2018 (I plan to break old chapter 1 into two chapters and an appendix. This is a new draft of the second part.)
Supplementary slides:
Partially reorganized material in Spring 2018 (I plan to break old chapter 2 into two chapters. This is a draft of the second part.)
Supplementary slides:
Supplementary slides:
Supplementary slides:
Supplementary notes used Spring 2017
Possible future material on modular programming based on:
Supplementary slides:
TBD: Regular expression combinators
Supplementary slides:
Supplementary slides:
Modules
Supplemental slides:
Common modules (Chapters 10 and 11)
Prefix syntax specific modules
Infix syntax specific module
Other modules
Code in work
Imperative Core Language Case Study (does not exist yet as of 27 Sep)
Interpreter modules (prefix syntax) code mostly works but needs a bit of update to match recent changes to Expression Language
TBD: Error handling with Maybe
and Either
– Handling Errors Without Exceptions (Scala)
TBD: Regular Expressions using algebraic data types
Not used Spring 2017
DSL in other languages (not used Spring 2017)
TBD: Discussion of functors, applicative functors, and monads (perhaps semigroups and monoids) – perhaps use Maybe
From Notes on Functional Programming with Haskell:
From Notes on Functional Programming with Haskell:
From Notes on Functional Programming with Haskell: