Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • Dec 01 19:43
    justjoheinz opened #1234
  • Dec 01 18:12
    julien-truffaut commented #1229
  • Dec 01 17:48
    scala-steward synchronize #1233
  • Dec 01 16:25

    julien-truffaut on gh-pages

    Deploy website Deploy website … (compare)

  • Dec 01 16:20

    cquiroz on master

    Update refined, refined-scalach… Merge pull request #1232 from s… (compare)

  • Dec 01 16:20
    cquiroz closed #1232
  • Nov 30 03:23
    scala-steward opened #1233
  • Nov 30 03:23
    scala-steward opened #1232
  • Nov 28 16:07

    julien-truffaut on gh-pages

    Deploy website Deploy website … (compare)

  • Nov 28 16:00

    cquiroz on master

    Update alleycats-core, cats-cor… Merge pull request #1231 from s… (compare)

  • Nov 28 16:00
    cquiroz closed #1231
  • Nov 28 03:47
    scala-steward opened #1231
  • Nov 23 11:20

    julien-truffaut on gh-pages

    Deploy website Deploy website … (compare)

  • Nov 23 11:15

    cquiroz on master

    Update scalafmt-core to 3.1.2 Merge pull request #1230 from s… (compare)

  • Nov 23 11:15
    cquiroz closed #1230
  • Nov 22 12:49
    scala-steward opened #1230
  • Nov 20 09:18
    justjoheinz opened #1229
  • Nov 20 02:26

    julien-truffaut on gh-pages

    Deploy website Deploy website … (compare)

  • Nov 20 02:21

    xuwei-k on master

    Update scala-compiler, scala-li… (compare)

  • Nov 20 02:21
    xuwei-k closed #1225
Julien Truffaut
@julien-truffaut
felher
@felher

Hey folks :)

I'm trying to use monocle 3.0.0 with ScalaJS and Scala 3.0, but I'm getting Referring to non-existent class monocle.syntax.AppliedPLens$ as an error during fastLinkJS. Has anyone seen that before?

Julien Truffaut
@julien-truffaut
hey, could it be possible you have multiple monocle version in your path? (we renamed the organsiation)
felher
@felher
@julien-truffaut Sorry for the noise, I was just being dumb :)
But, for posterity, if someone makes the same mistake I did: Make sure, when using scalajs, that you have three, not two %%% (goes without saying, but I somehow missed it)
Julien Truffaut
@julien-truffaut
np :)
felher
@felher
Hey again ;)
Can I use focus to zoom into an index of list? Like person.focus(_.addresses(0)) ?
Wow, again. I found it... index. Sorry for the noise again. I have to be careful that doesn't become a running gag.
Ken Scambler
@kenbot
No worries, ask away! I'm glad it was discoverable
Hartmut Pfarr
@hartmut27
I use e.g. GenLens[MyType](_.abc.def) to build a lens for later usage, which works very very nice (Monocle 2.1.0 Scala 2.13).
In rare cases where e.g. a lens is passed to a function as a free parameter I would like I could sometimes additionally build a lens with "identity semantics": A lens which reflects the original object applied to the lens itself (and also a lens which does not change the optics when chained), using composeLens with a lens and "identity lenses" I would expect no effect on the result after executing the "lens chain".
I've tried GenLens[MyType](_) without success, GenLens[MyType](identity) does not compile, GenLens[MyType](x=>x) does not compile too.
Any hints? Eventually I've overseen something.
Julien Truffaut
@julien-truffaut
You can get an identity optics using Iso.id or Focus()
Hartmut Pfarr
@hartmut27
merci :) I'll check that
Julien Truffaut
@julien-truffaut
np
Actually in Moncole before 3.0.0, it must be Lens.id
Hartmut Pfarr
@hartmut27
ah I see
works perfectly :) :)
Matt Hughes
@matthughes

Upgrading to 3.0.0 and trying to switch to andThen but it’s causing ambiguous overloaded method in a lot of places.

                val x: Optional[State,Option[EiaChannelNumber]] = Lenses.muxEiaChannel(idx)
                val y: Optional[State,EiaChannelNumber] = x.andThen(some)
                // Overloaded method andThen 
                // Lenses.muxEiaChannel(idx).andThen(some)

It works if I explicitly type the intermediate variables but it does not like to be chained. Any tips?

Ken Scambler
@kenbot
By moving to a single overloaded compose method, we traded away some type inference for convenience. To mitigate this, there are now extension methods for common generic operations like each, some, index, at, etc
You should be able to do x.some
Ken Scambler
@kenbot
Lenses.muxEiaChannel(idx).some
Matt Hughes
@matthughes
Oh yeah .some works. Is there a similar trick for avoiding the conflict between Cats’ index method and Monocle’s?
If I remove all of cats.syntax.all._, index works as expected
Matt Hughes
@matthughes
I can get around it by eliminating that one implicit but this is kind of gross: import cats.syntax.all.{catsSyntaxIndex => _, _}. That’s the name of an implicit def; not sure how stable to expect that identifier to be over time.
Julien Truffaut
@julien-truffaut
sorry about that, we'll try to improve this
Matt Hughes
@matthughes
thanks. Monocle 3 has been great so far. Love the unified API
Julien Truffaut
@julien-truffaut
Great. It would be nice to have a test so that we can detect this sort of conflict with cats
Ken Scambler
@kenbot
We have an open issue already, hopefully we'll have a fix or workaround soon. optics-dev/Monocle#1183
Matt Hughes
@matthughes
Has there been any discussion of moving to the Typelevel discord?
Julien Truffaut
@julien-truffaut
Nothing official. Personally, I don't have a strong preference.
Bob Glamm
@glamm

Ok, in a source file that just imports from the monocle namespace, I have:

val projectListLens = Iso.id[List[Project]].asLens
def indexedProjectLens(projectId: Int) = projectListLens.index(projectId)

and all seems good. Then, in a separate source file that imports from monocle as well as from cats, I have:

val  projectLens = indexedProjectLens(projectId)     // this is ok
val plens = projectListLens.index(projectId)   // this is not ok

with a type mismatch on projectId: found projectId.type (underlying type Int), expected cats.Representable.Aux[monocle.PLens[...]]

How do I make the latter (val plens = ...) work when cats names are imported?

... and, as I scroll up I see that maybe this is exactly optics-dev/Monocle#1183
Julien Truffaut
@julien-truffaut
yes, that's correct
Bob Glamm
@glamm
cool. For now I can define my indexed lenses in a separate compilation unit. Thanks!
Julien Truffaut
@julien-truffaut
you can use this workaround for now import cats.syntax.all.{index => _}
Bob Glamm
@glamm
Ahh, that also works for me I'm pretty sure. Thanks again!
bblfish
@bblfish:matrix.org
[m]
Hi, this I have put some ideas together on web-cats/CG#28. They are more on the theoretical side I think for the moment, but could be quite interesting.
I am working on a little demo using Monocle to see if that can give some insight into what a web server is.
bblfish
@bblfish:matrix.org
[m]
As I am modelling a Web Server as a nested HashMap, where the path of keys form the path of the URL. It is easy to write a getter using fold on the path, but I don't think it is so easy to build a setter. I would need a lens for a recursive datastructure. But looking around it seems that is not available.
bblfish
@bblfish:matrix.org
[m]
I guess that is equivalent to a tree with the path leading to a node where data lies.
bblfish
@bblfish:matrix.org
[m]
From what I gather searching the web, what is needed is what in Haskell is called Plated https://qfpl.io/posts/optimising-free-with-plated/
Julien Truffaut
@julien-truffaut
There is a Plated typeclass in Monocle too
bblfish
@bblfish:matrix.org
[m]
Ah! I saw some stackexchange questions which said that that was not there. Found it.
bblfish
@bblfish:matrix.org
[m]
I am not sure Plated is what I was looking for. I was looking for a way to locate a node in a Tree by a path, so that I could see what was there or change it.
Gabriel Volpe
@gvolpe:matrix.org
[m]
Maybe that's just Traversal ? bblfish
bblfish
@bblfish:matrix.org
[m]

going by the doc on traversal

A Traversal is the generalisation of an Optional to several targets. In other word, a Traversal allows to focus from a type S into 0 to n values of type A.

I guess that the usual path to an element is defined statically in the Monocle Lenses, whereas what is needed here is a path that is specified at run time.
Ken Scambler
@kenbot
Indexes let you do that. Looking at the Resource/Container structure that you/Henry Story submitted, you should be able to define given Index instances for your types, then do something like root.focus(_.index("www").index("foo").index("com").index("index.html").content).get
bblfish
@bblfish:matrix.org
[m]
sh ok, so I should be able to fold on a list to create such an index.
I'll try that.
Ken Scambler
@kenbot
You need to suck in a typeclass instance for each index call, so folding on a list of strings might not work in a straightforward way
bblfish
@bblfish:matrix.org
[m]

I think all I need is a way to be able to pick leaves of a

type Tree[+A] = Free[Map[String,_], A]

by the path to it's leaves... (need to think if that is the right datastructure first)