вычисления двух типов:
                  
                  
                  1. IO[String], строки из которых должны будут накапливаться в буффере (типа печать в консоль, но без печати)
                  
                  
                  2. Любые другие IO[A], которые будут влиять на первый тип
                  
                  
                  
                  
                  
                  Задача выглядит примерно так:
                  
                  
                  уравнение => 
                  
                  
                    for {
                  
                  
                      _ <- распечатать(уравнение)
                  
                  
                      упращённое <- упростить(уравнение)
                  
                  
                      _ <- распечатать(упрощённое)
                  
                  
                    } yield ()
                  
                  
                  
                  
                  
                  При этом функции печатати и упрощения возвращают IO. А результатом всего хочется видеть накопленный буффер печати.
                  
                  
                  
                  
                  
                  Я попробовал реализовать это с помощью StateT (scastie). Но интересно, есть ли более адекватный способ сделать это? 🤔
                  
                  
                
Можно попробовать через Ref
зачем самой операции упрощения возвращать IO?
Представим, что уравнение гигантское и мы хотим параллелизовать это действие
Можно стримами Будет что-то вроде (в зависимости от того какие стримы возьмешь) Stream[Equation].mapF(equation => reduce(equation).map(reduced => (equation, reduced))).buffer(19).to(sink)
Обсуждают сегодня