All homework assignments should emerge creatively from the Style guidelines. Homework is due each Monday **by the start of class**.

HW submission site / HW submission instructions

Week 1 (14 January): Introduction to Haskell ( html, lhs )

- Homework 1: due Monday, 21 January.

Week 2 (21 January): Algebraic Data Types ( html, lhs )

- Homework 2: due Monday, 28 January. [ error.log, sample.log, Log.hs ]

Week 3 (28 January): Recursion patterns, polymorphism, and the Prelude ( html, lhs )

- Homework 3: due Monday, 4 February.

Week 4 (4 February): Higher-order programming and type inference ( html, lhs )

- Homework 4: due Monday, 11 February.

Week 5 (11 February): More polymorphism and type classes ( html, lhs )

- Homework 5: due Monday, 18 February. [ ExprT.hs, Parser.hs, StackVM.hs ]

Week 6 (18 February): Lazy evaluation ( html, lhs )

- Homework 6: due Monday, 25 February.

Week 7 (25 February): Folds and monoids ( html, lhs )

- Homework 7: due Monday, 11 March. [ Editor.hs, Buffer.hs, Sized.hs, StringBuffer.hs, StringBufEditor.hs, carol.txt ]

Week 8 (11 March): IO ( html, lhs )

- Homework 8: due Monday, 18 March. [ Employee.hs, company.txt ]

Week 9 (18 March): Functors ( html, lhs )

- Homework 9: due never (no HW this week).

Week 10 (25 March): Applicative functors (part 1) ( html, lhs )

- Homework 10: due Monday, 1 April. [ AParser.hs ]

Week 11 (1 April): Applicative functors (part 2) ( html, lhs )

- Homework 11: due Monday, 8 April. [ AParser.hs, SExpr.hs ]

Week 12 (8 April): Monads ( html, lhs )

- Homework 12: due Monday, 15 April. [ Risk.hs ]