-
Notifications
You must be signed in to change notification settings - Fork 15
Home
Let's Make a Deal with Type Class Instances.
Как организовать несколько инстансов одного и того же тайпкласса? Что такое законы и что такое полугруппа?
Lazy brain overflow
cats.Eval. Модели вычислений. Стэкобезопасность.
Первая встреча с Foldable.
- Необходимо создать свой собственный тайпкласс
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)
-
Создать экземпляр для typeclass из первого шага для
Stream
и реализоватьfoldMapLazy
-
Проверку, что все правильно можно сделать с помощью функций
sumWhile
,sumN
(были во время сессии), используя typeclass из первого шага.
To Fold Unfoldable
Орлята продолжают знакомство с классом типов Foldable и заодно продолжают тренировать технику стекобезопасного программирования.
Реализовать инстансы Foldable
для классов Collect
и FlatMap
из streams.scala.
Написать класс-обертку для String
и инстанс Foldable
для него, позволяющие делать посимвольные свёртки строк, не пользуясь конвертацией в промежуточную коллекцию.