операции, возвращающие Task, и операции, возвращающие Observable, то как это лучше отображать в исходном описании алгебры? Если не разбивать на две разные алгебры, то мне приходят на ум два варианта. В первом протекает реализация (но, вроде, mu работает именно так), а во второй приходится тащить две дырки. Какие есть плюсы и минусы у этих подходов?
с мониксом плотно не работал, но могу сказать, что в параметрах типа должны быть *эффекты*. DBIO - это эффект выполнения кода в транзакции, Observable[Data], я так понял, стрим того же эффекта Правильней третий вариант: trait DataStorage1[DBIO[_]] { def select(id: Int): DBIO[Option[Data]] def stream(valueGT: Int): Stream[DBIO, Data] //либо DBIO[Stream[Data]] } Разумеется, в случае стрима нужно четко понимать, когда требуется открывать и закрывать транзакции БД.
первый вариант уничтожает весь профит от ТФ
Обсуждают сегодня