Contributors Updated Stargazers Issues License LinkedIn


IT5100A

Industry Readiness: Typed Functional Programming

by Foo Yong Qi

GitHub · Report Bug · Request Feature

This is a set of lecture notes for students enrolled in IT5100A—Industry Readiness: Typed Functional Programming in NUS SoC.

About IT5100A

Typed functional programming are becoming more widely adopted in industry, as can be seen in the success of a number of advanced programming languages, such as OCaml, Haskell and Scala 3. These advanced languages offer a range of expressive features to allow robust, reusable and high-performing software codes to be safely and rapidly developed. This course will cover key programming techniques of typed functional programming that are becoming widely adopted, such as strong typing, code composition and abstraction, effect handlers, and safe techniques for asynchronous and concurrent programming.

About These Notes

I hope that these notes can be used as good supplementary material for those looking to learn the concepts of Typed Functional Programming in more detail. Each of these chapters comes with exercises in Python and Haskell so that you're able to replicate some of the ideas from purely-functional languages in general-purpose multi-paradigm languages.

Therefore, to avoid confusion, code blocks are annotated with the logo of the target programming language on the left. Examples below. (Readers on mobile might have to rotate their phones to landscape to view the logos.)

Python

this = 'is some Python code'

Haskell

this :: String
this = "is some Haskell code"

Java

class This {
    public static void main(String[] args) {
        System.out.println("is some Java code");
    }
}

Lean 4

def this: String := "is some Lean 4 code"

Updates

This work is incomplete, and therefore will be regularly updated. As such, please run a hard refresh (Ctrl + F5) every time you visit the page.

A badge is shown at the beginning of every page describing when it was last updated. The badge looks like this:

Updated

Ensure that the badge displays the expected date of the last update.

Contributing

This project is a single-author text, and is incomplete. Thus, this project is not open to pull requests without prior agreement. However, please feel free to improve the quality of this content by submitting bug reports and feature requests. All your contributions other than by the author will be considered a donation of your work to this project, and you are not considered an author or owner of the content once they have been incorporated.

Please submit all requests for content and bugs either as a GitHub issue or contact the author directly.

Contributors

contrib.rocks image

License

All rights to this project are reserved by the author. Unauthorized reproduction, distribution, or modification of this project, in whole or in part, is strictly prohibited without prior written permission. The author reserves the right to modify or change the licensing terms at any time and without prior notice. For inquiries regarding licensing or usage, please contact the author.

Logos and other external assets used in this project do not belong to the author.

Contact

Author: Foo Yong Qi - yongqi@nus.edu.sg

© 2024 Foo Yong Qi. All Rights Reserved.


Release History

2024

DateDescription
13 OctWriteup on Monads, excluding exercises
10 OctWriteup on the existential typeclass pattern
28 Sep
  • Additional writeups and bug fixes in the existing chapters
  • Bug fixes in operator highlighting in code blocks in light modes.
  • Recap on first-class functions and lambda calculus.
  • Solutions to exercises for the first four chapters.
26 SepThe first draft of these notes have been released with the first four chapters completed.