Postscript ========== Summay: What we have done We've been able to sample the capabilities and programming style used in functional programming. strict, impure in SML lazy, pure in Haskell We covered virtually every aspect of SML, but a skilled SML programmer needs to master technique and the libraries and tools, and gain experience programming at scale. With Haskell, we have covered some of the main ideas: - type classes (basic and constructor classes) - monads - lazy evaluation But there is lots more: - first-class polymorphism - programming with multiple monads - generalized abstract datatypes ... making Haskell a much more complex language than SML. Both SML and Haskell are statically typed, with type systems based on the Hindley-Milner type inference algorithm, yielding polymorphic types. We explored a realistic implementation of Hindley Milner (typecheck2). To support "interpreted types", SML uses its module system, while Haskell uses type classes. Unfinished business. Exploring the deeper levels of Haskell (fancier types) Further exploration of concurrent functional programming Application areas like functional reactive programming Connection with logic and proof (proof assistants like Coq) Specification, testing, and verification. Dependent types (e.g. the Agda language) Contrasts with OOP (the dominant "paradigm")