-
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 для него, позволяющие делать посимвольные свёртки строк, не пользуясь конвертацией в промежуточную коллекцию.