Skip to content
alexander-branevskiy edited this page Aug 4, 2018 · 19 revisions

Table of Contents

Season 1


Episode 1

Hello Type Class!

Домашка

Дополнительные материалы


Episode 2

Let's Make a Deal with Type Class Instances.
Как организовать несколько инстансов одного и того же тайпкласса? Что такое законы и что такое полугруппа?

Домашка

Дополнительные материалы

Про дырки (HKT)


Episode 2.5 (Optional)

Домашка

Дополнительные материалы


Episode 3

Lazy brain overflow
cats.Eval. Модели вычислений. Стэкобезопасность. Первая встреча с Foldable.

Домашка

  1. Необходимо создать свой собственный тайпкласс Foldable и объявить в нем три функции:
  • абстрактную foldMapLazy с сигнатурой:
type LazyMonoid[A] = Monoid[Eval[A]]
def foldMapLazy[A, B: LazyMonoid](fa: F[A])(f: A => Eval[B]): Eval[B]
  • foldRightLazy (реализовать через foldMapLazy, сигнатура должна быть как в cats)
  • foldLeft (реализовать через foldMapLazy, сигнатура должна быть как в cats)
  1. Создать экземпляр для typeclass из первого шага для Stream и реализовать foldMapLazy

  2. Проверку, что все правильно можно сделать с помощью функций sumWhile, sumN (были во время сессии), используя typeclass из первого шага.

Дополнительные материалы


Episode 4

To Fold Unfoldable
Орлята продолжают знакомство с классом типов Foldable и заодно продолжают тренировать технику стекобезопасного программирования.

Домашка

Реализовать инстансы Foldable для классов Collect и FlatMap из streams.scala.

Написать класс-обертку для String и инстанс Foldable для него, позволяющие делать посимвольные свёртки строк, не пользуясь конвертацией в промежуточную коллекцию.

Дополнительные материалы