Это то, о чем ссылка выше.
((couch ++ (couch >>> cat)) >>> life) ++ (couch >>> cat)
Тут couch инициализируется 1 раз
меджик вообще коспозицию делает самым тупым способом. Если от couch зависят все лееры, то
val life = compose( tv, kvas, cat, couch)
Может превратиться во что-то вроде этого:
val life = (
(couch >>> tv) ++
(couch >>> cat) ++
couch ++
) >>> kvas
На самом деле сложнее заставить ZLayer инстанциировать 2 экземпляра