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