Typeful Scala: Exploiting the Power of Types - 2/3 days

Upcoming dates for public courses

  • Clerkenwell, London Weds 30th – Thurs 31st May 2012 Book now ...
  • Clerkenwell, London Weds 27th – Thurs 28th June 2012 Book now ...
  • Clerkenwell, London Weds 25th – Thurs 26th July 2012 Book now ...
  • Clerkenwell, London Weds 29th – Thurs 30th Aug 2012 Book now ...
  • Clerkenwell, London Weds 26th – Thurs 27th Sept 2012 Book now ...
  • Clerkenwell, London Weds 31st Oct – Thurs 1st Nov 2012 Book now ...

Course Outline

Miles Sabin's 2/3 day Typeful Scala course is aimed at developers and leads who have mastered the essentials of core Scala and want to take their understanding of the language and its compiler to the next level. It covers Scala's powerful type system in depth with concrete illustrations of practical applications of its more advanced features. The course also introduces the Scala compiler's plug-in architecture and shows how it can be used to support tools and extend the language. The course has a practical focus, mixing presentation with in-depth hands-on labs and exercises. It is an ideal follow on to Underscore's Core Scala course.

If you have mastered the essentials of core Scala and want to learn more about its type system and how best to exploit it, gain in-depth understanding of its standard library, and discover what can be achieved by extending the Scala compiler via its plugin architecture, then this is the course for you.

This advanced Scala course is offered both publicly and privately at your site. When delivered privately you have complete course programming flexibility allowing you and your team to tailor course content to your needs and to fit its delivery around your normal schedule — for example, scheduling two day courses as four half days over four weeks might be suitable. Please contact us to tell us what you need and for pricing and bookings.

You will ...

  • Gain a comprehensive understanding of Scala's powerful type system, how it's used in advanced libraries such as Scalaz and shapeless, and how compile-time type-level computation can be put to practical use.
  • Learn the inner workings of Scala's collections framework, how to extend it and how to apply the techniques it employs in your own designs.
  • Take away knowledge of how and when to use Scala compiler plugins to instrument and transform Scala code and how to extend Scala's type system in domain-specific ways.
  • Learn what delimited continuations are, how they are implemented in Scala and how they can be applied to real world problems.

Course prerequisites

To benefit from this course you should have 6 months or more experience working with Scala or have already followed the Underscore's Core Scala course, and have good general understanding of object-oriented or functional programming language concepts and implementation.

Programme ...

A deep dive into the Scala type system

  • Abstract types revisited
  • Path dependent types
  • Family polymorphism
  • Traits and self-types
  • The Cake pattern and the Bakery of Doom
  • Higher-kinded and structural types
  • Encoding existentials, virtual classes, higher-rank and ad hoc polymorphism

Extending the collections framework

  • A review of the collections framework
  • The role of higher-kinded types and ad hoc polymorphism
  • Builders
  • Working with Arrays and Strings
  • Crafting a new collection

An introduction to scalaz

  • Haskell origins
  • A selection of typeclasses
  • scalaz encodings
  • Ad hoc polymorphism vs. subtyping
  • Interop with the Scala standard library

Writing compiler plug-ins

  • Compiler phases
  • The scalac AST
  • Plug-ins to instrument Scala source
  • Plug-ins to augment behaviour
  • Plug-ins to extend the type system

Continuations

  • Varieties of continuation
  • shift/reset in Scala
  • Type-safe printf
  • Automatic resource management
  • Coroutines
  • Generators
  • Goto in Scala

Type-level computation

  • Church numerals and Peano arithmetic
  • Sized containers
  • Polymorphic function values
  • Heterogenous lists
  • Abstracting over arity
  • Scrap your boilerplate in Scala

Please contact us to arrange your booking.