kenbot / goggles

Pleasant, yet principled Scala optics DSL
MIT License
196 stars 7 forks source link

Internal error: "get" fails on setters, "set" fails on getters #21

Closed kenbot closed 7 years ago

kenbot commented 7 years ago
case class Potato(i: Int)
case class Banana(p: Potato)
case class Beetroot(b: Banana)

val getBanana = monocle.Getter[Beetroot, Banana](_.b)
val setBanana = monocle.Setter[Beetroot, Banana](f => br => br.copy(b = f(br.b)))
val foldBanana = new monocle.Fold[Beetroot, Banana] { def foldMap[M: scalaz.Monoid](f: Banana => M)(br: Beetroot): M = f(br.b)}
val br = Beetroot(Banana(Potato(4)))

scala> get"$br.$setBanana.p.i"
<console>:20: error: The macro internally failed to get values from optic Setter.
Please consider filing an issue at https://github.com/kenbot/goggles/issues.
       get"$br.$setBanana.p.i"

scala> set"$br.$getBanana.p.i" := 5
<console>:20: error: value asSetter is not a member of monocle.Getter[Unit,Int]
       set"$br.$getBanana.p.i" := 5
       ^
scala> set"$br.$foldBanana.p.i"
<console>:20: error: value asSetter is not a member of monocle.Fold[Unit,Int]
       set"$br.$foldBanana.p.i"
kenbot commented 7 years ago

get"$br.$setBanana and set"$br.$getBanana are minimal test cases. It's fixed now; there are new MacroUserErrors GetterOpticRequired and SetterOpticRequired.