Professional Haskell Development Course:
Level III (Two Days)
Description: This level is for you if you have Haskell experience but want to start using Haskell like the experts.
Self-check precondition: You have written quite large Haskell programs—some concurrent—and used 3rd party libraries. You know how to debug your programs.
Day One: Level III.A. Course Curriculum
Objective: You will be able to recognize well-structured and space-efficient Haskell programs, and know how to produce them. You will be able to take advantage of multi-core to accelerate your programs, and to interact with external libraries.
1. Harnessing Multi-Core
- Prerequisite: Concurrent Programming
- Learning objective: Able to write programs that run faster on multi-core architectures.
- Content: Par and pseq, MonadPar with I-structures, ThreadScope for debugging performance.
2. Design in Haskell
- Prerequisite: Monads, Laziness
- Learning objective: Able to recognize tasteful programs, some capabilities in producing them.
- Content: Refactoring, custom data types, coding standards, pitfalls of type classes and over-abstraction, combinator library design, algebraic laws, embedded domain-specific languages (DSLs).
3. FFI
- Prerequisite: IO Monad, Laziness
- Learning objective: Able to call to and from C.
- Content: Marshaling, unsafePerformIO, heap management, stable pointers, Hsc2hs, binding to external libraries, improving thread-safety.
4. Space Leaks
- Prerequisite: Type Classes, Laziness
- Learning objective: Able to understand space efficient programming; able to use profiling tools to identify space problems, and know how to fix them.
- Content: Profiling tools, reading visualizations, recognizing leaks, using seq and NFData.
Day Two: Level III.B. Course Curriculum
Objective: You will be able to write robust programs in Haskell that can be published as libraries for others to use.
5. Production Environments
- Prerequisite: IO Monad
- Learning objective: Able to create and publish libraries for others to use.
- Content: Publishing code, cabal, Haddock documentation, multi-platform regression, cabal dev.
6. Systems Programming
- Prerequisite: IO Monad
- Learning objective: Able to select and use the major libraries that arise in system programming.
- Content: ByteStream, Process (shell), Posix, Network FilePath, SSH.
7. Exceptions
- Prerequisite: Concurrent Programming
- Learning objective: Able to use exceptions, some experience of managing cross-thread exceptions for robustness.
- Content: Execution exceptions, extensible exceptions, throw, catch, mask, block.
8. Performance Analysis
- Prerequisite: Space Leaks
- Learning objective: Able to understand time efficient programming; able to identify where a program is spending its time and how to optimize it.
- Content: Criterion performance measurement library, cost centers, unboxed values, INLINE, SPECIALIZE pragmas.