What are the benefits of a type system? Describe a problem that strong static typing helps prevent. Describe a problem that strong static typing does not help prevent.
What is recursion? What is well-founded recursion? What is a base case?
Define referential transparency. Why is this a desirable property of a function? What optimizations opportunities does it make possible?
What is an algebraic data type? How does this differ from a struct
in C or a class
in an OOP language?
Describe what the term fold
typically means in the Haskell ecosystem.
What is an accumulator? What algorithms can be implemented as folds.
What is parametric polymorphism? How does this differ from ad-hoc polymorphism. How does the Haskell language allow users to work with them? How are these accomplished in other languages (e.g. Java)?
What is laziness? When is this useful? When does it get in the way?
What is a join?
Describe the intuition behind normal forms. Don't go through 1NF, 2NF, etc. individually. Just describe what the common theme is. When would denormalization be useful.
What is an index? Describe an operation that would be accelerated by an index. Describe an operation that would not.