Haskell Additional Info

 

What to Bring

Participants are welcome to bring their own laptops with GHC and cabal already installed, or to use netbooks provided by Galois. There will be code provided as a foundation for the exercises, but where applicable participants will be welcome to apply the exercises to their own code.

Additional Takeaways

To support further learning, each participant will receive a copy of Real World Haskell (O’Reilly) and additional reading material.

 

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.