Таким образом, в Скале мы имеем типичную подпись объектива, как:Как реализовать параметрические линзы, которые меняют тип состояния
case class Lens[O,V](get: O => V, set: (O,V) => O)
Но как вы можете видеть, это только обновления и устанавливает значения одного и того же типа, что делает не устанавливайте один тип для другого. То, что я имею в виду нечто большее, как это:
case class Lens[O[_],A,B](get: O[A] => A, set: (O[A],B) => O[B])
С A
и B
имеют смысл для O[_]
Мой вопрос есть. Неужели это перестает быть изоморфным? Есть ли более простой способ, не нарушая некоторые правила?