Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
  • 01:32
    SethTisue edited #1510
  • 01:32
    SethTisue synchronize #1510
  • 00:19

    SethTisue on main

    update CoC points-of-contact (#… (compare)

  • 00:19
    SethTisue closed #1307
  • 00:16
    SethTisue opened #1307
  • Nov 29 20:52
    SethTisue synchronize #2241
  • Nov 29 20:22
    SethTisue commented #2241
  • Nov 29 20:20
    SethTisue review_requested #2241
  • Nov 29 20:20
    SethTisue synchronize #2241
  • Nov 29 20:18
    SethTisue synchronize #2241
  • Nov 29 20:17
    SethTisue opened #2241
  • Nov 29 20:03
    SethTisue edited #1509
  • Nov 29 20:01
    SethTisue edited #1510
  • Nov 29 19:55
    SethTisue synchronize #9763
  • Nov 29 19:55
    SethTisue assigned #9763
  • Nov 29 19:53
    SethTisue edited #9763
  • Nov 29 19:53
    scala-jenkins milestoned #9763
  • Nov 29 19:53
    SethTisue reopened #9763
  • Nov 29 19:51
    SethTisue edited #1509
  • Nov 29 19:51
    SethTisue edited #1510
heksesang
@heksenlied:matrix.org
[m]
@epifab: Unsure why, but it obviously doesn't interpret the type as "yo" (as manually specifying that type makes it work). But I do mean to recall there has been such a problem mentioned somewhere (some issue on the tracker?) where one had to store things in a val and pass that val to the method for it to type it correctly.
Fabio Epifani
@epifab
@heksenlied:matrix.org yeah, something definitely wrong there. I opened a bug lampepfl/dotty#12583
heksesang
@heksenlied:matrix.org
[m]
The problem that happens is that A in Wrapper is somehow being "altered" by test, which makes summoning ValueOf[A] fails. What seems to also work is moving the using-clause to test, so it obviously is a case of the test-method making the parameter less specific.
Michał Pałka
@prolativ

test(Wrapper("yo")) works if you redefine Wrapper as

case class Wrapper[A <: Singleton](a: A)

so it looks like using ValueOf[A] is the problem here, not Singleton itself

heksesang
@heksenlied:matrix.org
[m]
Yeah, the type of A within test doesn't resolve to "yo", I guess it resolves to String & Singleton instead.
Which means that, yes, it's a singleton, but there is no way to summon a ValueOf for it.
Michał Pałka
@prolativ
This works
case class Wrapper[A <: Singleton](a: A)(using ValueOf[a.type])

def test[A <: Singleton](blabla: Wrapper[A]): Unit = ()

test(Wrapper("yo"))
Fabio Epifani
@epifab
yeah, something is wrong with the type inference. I also just tested it in Scala 2, and this is a regression
it's interesting that this last example works. I think it defeats my understanding of Singleton
Vojtech Letal
@letalvoj

Please, anyone has a quick hint on how to replicate the three lines of scala2 in scala3? 🙏🏻

I will try to give a more specific example. I would like to have an Expr[CC] which is equivalent to instantiating a new instance of CC, yet generic.

    case class CC(i:Int)
    val expected = '{ new CC(1) }

Attempts to generalize that:

    val ts = TypeRepr.of[CC] // or Type[CC] ...
    val attempt1 = '{new ts(1)} // something as simple as this fails
    val attempt2 = Apply(
      Select.unique(New(Ident(TermRef(ts,"???"))),"<init>"),
      List(Literal(IntConstant(1)))
    ).asExprOf[CC] // I have no idea how to instantiate this
Pls, any chance I can create a quote equivalent to instantiating a new class, given I have
  • the necessary constructor parameters (List[Expr[_]])
  • type of the class (Type[CC])
    ? 🙏🏻
Swoorup Joshi
@Swoorup
is there a way to make this tail recursive?
def findGapsForSorted(x: List[Int]): List[Tuple2[Int, Int]] = 
  def solveFor(xs: List[Int]): List[Tuple2[Int, Int]] =
    val midpoint = xs.length/2
    if xs.length > 2 then 
      val first = xs.head
      val last = xs.last
      if (first + xs.length - 1 >= last)
        then List((first, last))
      else 
        solveFor(xs.slice(0, midpoint)) ++ 
        solveFor(xs.slice(midpoint, xs.length))
    else
      xs match 
        case Nil => List.empty
        case List(one) => List((one, one))
        case start :: end :: Nil => 
          if (start + 1) >= end 
          then List((start, end))
          else List((start, start), (end, end))
        case _ => ???

  solveFor(x)
    .foldLeft(List.empty) { (state, el) => 
      state match 
        case h :+ (start, end) if end + 1 == el._1 => h :+ (start, el._2)
        case xs => xs :+ el
    }
Rob Norris
@tpolecat
Yes, but it's probably not worth it. Stack depth is on the order of log2(xs.length) which can never be larger than 32.
However you're doing a lot of O(N) operations here (.length, ++, :+) that might make this routine slow for large inputs.
Graham Brown
@geronimus

Hello there!

Is there some way to get at an object's runtime TypeTag in Scala 3?

(I'm not using macros. I just want to output it, in order to provide a helpful message in some unit tests.)

Is it safe to add the 2.13 version of the scala-reflect API to my libraryDependencies with cross-compilation?

Or is there a better way of doing this in Scala 3?

Rob Norris
@tpolecat
You just want the name of a type for diagnostic purposes?
Graham Brown
@geronimus
Yes, that's it!
Rob Norris
@tpolecat
This may do what you want https://github.com/tpolecat/typename
It works in Scala 2 and3
"Works", I should say.
Graham Brown
@geronimus
Magnificent! Thank you!
Rob Norris
@tpolecat
Getting the string representation for a type is a longstanding and super irritating problem in Scala and it has no general solution as far as I know. Many people have told me "oh that should be easy" but it's not.
OlegYch
@OlegYch
Swoorup Joshi
@Swoorup
@tpolecat that means I would probably have to use arrays along with tailrecursion
Graham Brown
@geronimus
Thanks @tpolecat and @OlegYch ! This solves my immediate problem and also makes for a lot of interesting reading.
Rob Norris
@tpolecat
I'm getting a NoSuchMethodError trying to call this Java method https://github.com/testcontainers/testcontainers-java/blob/8965712f239ae3c449cec579264af5e79265f314/core/src/main/java/org/testcontainers/images/builder/traits/ClasspathTrait.java#L13 from Scala 3. @smarter is there anything about this Java type that makes you suspicious?
It works fine when called from Scala 2.11/12/13
Luis Miguel Mejía Suárez
@BalmungSan
Maybe something related to the F-Bound?
shvahabi
@shvahabi:matrix.org
[m]

Is xml string interpolation implemented as a feature of Scala 3 ? If positive, how can I make

xml"""
         |<p>Hello World!</p>
         |""".stripMargin

compile? I always receive a value xml is not a member of StringContext error message.

Luis Miguel Mejía Suárez
@BalmungSan
AFAIK xml support is not part of the compiler anymore.
If such interpolator exists it should be part of some library, maybe this one: https://github.com/scala/scala-xml
1 reply
shvahabi
@shvahabi:matrix.org
[m]
is the sample code for xml interpolation at https://dotty.epfl.ch/docs/reference/dropped-features/xml.html compilable in anyway?
Luis Miguel Mejía Suárez
@BalmungSan
It seems the Scala 3 docs are still at RC1
Uhm, I hope the will update them soon.
Tom Grigg
@griggt
@BalmungSan 3.0.1-RC1, not 3.0.0-RC1
Luis Miguel Mejía Suárez
@BalmungSan
ups
But that import doesn't work on 3.0.0 so maybe it was just added?
Tom Grigg
@griggt
the docs for 3.0.0 are not online afaik
Luis Miguel Mejía Suárez
@BalmungSan
Ah it is another library @shvahabi:matrix.org https://github.com/lampepfl/xml-interpolator
Tom Grigg
@griggt
jinx
shvahabi
@shvahabi:matrix.org
[m]
Thanks @griggt and @BalmungSan it seems to be the right answer. But that library seems neither have a release nor being published to scaladex. How can I add it as a dependency? Any solution other than an unmanaged dependency in lib folder?
It also is not available under dotty here https://dotty.epfl.ch/api/index.html
Luis Miguel Mejía Suárez
@BalmungSan
@shvahabi:matrix.org lampepfl/xml-interpolator#17
1 reply
It seems that repo is just a PoC (that apparently was successful)
So the final results should be merged into scala-xml and published soon.
As of today, it seems there is not easy way of using it.
You may want to pop up in that issue and show interest in it being merged.
Felix Bruckmeier
@felixbr

Hi, I've noticed that getting the name of method parameters seems to have changed between 2.13.4 and 2.13.5.

When I have a method

def listCars(`airport-code`: String): Seq[String] = ???

and try to get the names via

classOf[RentalStation].getMethod("listCars", classOf[String]).getParameters.map(_.getName)

Previously it returned "airport-code" for the parameter and now it seems to return "airport$minuscode". My guess is the internal representation has changed and therefore the java reflection no longer works as expected. Is there any other way to solve this than a bandaid-solution using .replaceAll() ?

(This is not my code, so please don't explain to me that reflection is bad, I know that. I'm just trying to upgrade this very commonly used library)

Luis Miguel Mejía Suárez
@BalmungSan
Maybe using Scala reflection over Java one would provide better results?