Optics library for Scala
refocus
to scala 2 by @julien-truffaut in https://github.com/optics-dev/Monocle/pull/1206
Index
for various Scala 2 sequences by @skozlov in https://github.com/optics-dev/Monocle/pull/1285
GenLens
issue with evidence shadowing by @NTPape in https://github.com/optics-dev/Monocle/pull/1265
Plated.transformOf
by @GreyPlane in https://github.com/optics-dev/Monocle/pull/1319
Full Changelog: https://github.com/optics-dev/Monocle/compare/v3.1.0...v3.2.0
refocus
to all optics as an alias for .andThen(Focus(...))
(#1184) @kenbotcase class User(name: String, address: Address)
case class Address(streetNumber: Int, street: Option[Street])
val elise = User("Elise", Address(12, Some(Street("high street"))))
val addressLens: Lens[User, Address] = Focus[User](_.address)
val newLens : Lens[User, Int] = addressLens.refocus(_.streetNumber)
newLens.replace(50)(elise)
// or using the applied syntax
import monocle.syntax.all._
elise.focus(_.address).refocus(_.streetNumber)
GenIso
to Scala 3 (#1185) @japgollyIso.fields
(#1197) @kenbotindex
is now a direct method for all optics for better Cats compat (#1192) @kenbotAsPrismImpl
(#1186) @nicolasstuckilibraryDependencies ++= Seq(
"dev.optics" %% "monocle-core" % "3.0.0",
"dev.optics" %% "monocle-macro" % "3.0.0", // only for Scala 2.13
)
import monocle.Focus
case class User(name: String, address: Address)
case class Address(streetNumber: Int, streetName: String)
Focus[User](_.name)
// res: Lens[User, String]
Focus[User](_.address.streetNumber)
// res: Lens[User, Int]
Focus
to an object (#1039) @kenbotimport monocle.syntax.all._
val anna = User("Anna", Address(12, "high street")
anna.focus(_.name).replace("Bob")
anna.focus(_.address.some.streetNumber).modify(_ + 1)
Focus
path. This feature was enabled by a trick found by @yilinwei #1079
as
(#1050 #1112) @kenbotwithDefault
(#1094) @kenbotat
, index
(#1081) @kenboteach
(#1072) @kenbotsome
@kenbotIso
(#1111) @kenbotimport monocle.Focus
case class UserId(value: Long)
Focus[UserId](_.value)
// res: Iso[UserId, Long]
andThen
to compose (#967 #1000) @julien-truffautreplace
, deprecate set
(#974) @sapizhakreplaceOption
, deprecate setOption
(#1006) @jamesbruce97filter
, deprecate unsafeSelect
(#988) @julien-truffautAppliedOptics
(#1113) @julien-truffautmonocle.syntax.all._
for all extension methods including macros (#1120) @julien-truffautat
and index
(#978) @sapizhakfilterIndex
(#999) @julien-truffautas
(#1110, #1123) @julien-truffauteach
(#908) @julien-truffautwithDefault
(#886) @julien-truffautto
(#896) @TimWSpenceorElse
on Optional (#1021) @julien-truffautzip
Lenses
together (#1109) @vaslabsoptics
extension method, deprecate all applyX
methods (#1003) @julien-truffautTraversal.applyN
to accept Optionals
(#1100) @julien-truffautPOptional
into Ior
's left and right (#893) @chwthewkeMap
instance for Each
and FilterIndex
from unsafe
module to core
(#998) @julien-truffautcodiagonal
except Lens.codiagonal
(#1115) @julien-truffautfirst
, second
, left
, right
, split
. Move choice
to cats instance (#1114) @julien-truffautgeneric
and state
module - no replacement (#986) @julien-truffautPossible
- no replacement (#992) @julien-truffautCons
, Cons1
, Snoc
, Snoc1
- no replacement (#984) @julien-truffautCurry
, Empty
, Reverse
- no replacement (#980) @julien-truffautcats
to 2.6.1refined
to 0.9.26scalajs
to 1.6.0libraryDependencies ++= Seq(
"dev.optics" %% "monocle-core" % "3.0.0-RC2",
"dev.optics" %% "monocle-macro" % "3.0.0-RC2", // only for Scala 2.13
)
as
(#1112) @kenbotIso
(#1111) @kenbotzip
Lenses
together (#1109) @vaslabsas
extension method to all optics (#1110, #1123) @julien-truffautmonocle.syntax.all._
for all extension methods (including macros) for both Scala 2 and 3 (#1120) @julien-truffautAppliedOptics
(#1116) @julien-truffautAppliedOptics
(#1113) @julien-truffautcodiagonal
except Lens.codiagonal
(#1115) @julien-truffautfirst
, second
, left
, right
, split
. Move choice
to cats instance (#1114) @julien-truffautwithDefault
feature, remove Eq
constraint (#1094) @kenbotat
, index
features (#1081) @kenbotKeywordContext
to restrict Focus
syntax (#1079) @kenbotFocus[X]()
and .focus()
to generate Iso
/ApplyIso
(#1098) @julien-truffautTraversal.applyN
to take Optionals
(#1100) @julien-truffautAt
instance for tuples, use Focus
on tuples instead (#1096) @julien-truffautorElse
on Optional (#1021) @julien-truffautfilterIndex
shortcut on all optics (#999) @julien-truffautat
and index
shortcut on all optics (#978) @sapizhakeach
shortcut on all optics (#908) @julien-truffautwithDefault
to fallback when on a None
(#886) @julien-truffautto
which lifts a function to Getter
(#896) @TimWSpencePOptional
into Ior
's left and right (#893) @chwthewkeandThen
, deprecate all composeX
methods (#967 #1000) @julien-truffautreplace
, deprecate set
(#974) @sapizhakreplaceOption
, deprecate setOption
(#1006) @jamesbruce97optics
extension method, deprecate all applyX
methods (#1003) @julien-truffautMap
instance for Each
and FilterIndex
from unsafe
module to core
(#998) @julien-truffautfilter
, deprecate unsafeSelect
(#988) @julien-truffautat(1)
, at(2)
... for tuples, deprecate FieldX
(#959) @julien-truffautgeneric
and state
module - no replacement (#986) @julien-truffautPossible
- no replacement (#992) @julien-truffautCons
, Cons1
, Snoc
, Snoc1
- no replacement (#984) @julien-truffautCurry
, Empty
, Reverse
- no replacement (#980) @julien-truffautas
feature (#1050) @kenboteach
feature (#1072) @kenbotFocus
to all syntax import (#1058) @julien-truffautFocus
macro pre-applied to object (#1039) @kenbotGenLens
redirect to Focus
(#1037) @julien-truffautGenPrism
redirect to Focus
(#1063) @asjad02ApplyXXX
methods not fully applied (#1044) @julien-truffautrefined
to 0.9.21 (#1078) @scala-stewardcats
to 2.4.2 (#1068) @scala-stewarddiscipline-core
to 1.1.4 (#1066) @scala-stewardscalajs
to 1.5.0 (#1053) @scala-stewardsbt
to 1.4.7 (#1017) @scala-stewarddependabot.yml
(#962) @xuwei-kmunit
(#943) @cquirozWhat's changed: