Courses taught by
David Casperson 

Although this is a generic topics course that may be put to a variety of purposes, I have essentially taught only four distinct topics in the eight times that I have offered it.
I have taught this course as an Introduction to Symbolic Computation, and more specifically as Computational Ring Theory in Winter 1998, Winter 2002, and in Winter 2009.
This course covers some basic ring theory, such as definitions of rings, fields, integral domains, unique factorization domains, Euclidean domains and the like.
It then covers representations of integers and polynomials, gradeschool algorithms, fast multiplication, methods of representing finite fields and the like.
It then moves towards the factorization of polynomials over the integers.
I have taught this course as a course on Functional Data Structures, in Fall 2002, Winter 2004, and Winter 2006.
This course loosely follows Purely Functional Data Structures by Chris Okasaki, although it usually starts with no assumption that the students know a functional programming language.
The fundamental theme of this course is that even with persistent data structures laziness can help achieve amortized time.
This course was taught as a course on semantic modelling only once, in Winter 2000 (although much of the same material was reprieved in a module of CPSC 706 in Fall 2003.)
The point of this course was to show that functional languages can be used to test models of denotational semantics directly and quickly.
This course was taught as Advanced Functional Programming in Winter 2019.
This course explored intermediate Haskell programming, in particular,
use of the type classes
Applicative
,
Foldable
,
Monoid
,
Monad
,
Traversalbe
, and
Functor
;
the notion of fixed points, and polymorphic recursion.
It explored the implementation of the Data.Sequence
data
type in depth.