Scala Design Patterns: Patterns for Practical Reuse and Design