Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
  • Oct 22 22:54
    SethTisue labeled #9790
  • Oct 22 22:54
    scala-jenkins milestoned #9790
  • Oct 22 22:54
    SethTisue opened #9790
  • Oct 22 21:11
    krasinski commented #12475
  • Oct 22 21:10
    krasinski commented #12475
  • Oct 22 17:55
    SethTisue assigned #1499
  • Oct 22 17:49
    SethTisue opened #1499
  • Oct 22 17:47
    SethTisue edited #795
  • Oct 22 17:47
    SethTisue edited #795
  • Oct 22 17:47
    SethTisue edited #795
  • Oct 22 17:46
    SethTisue demilestoned #754
  • Oct 22 17:46
    SethTisue demilestoned #577
  • Oct 22 17:46
    SethTisue commented #9697
  • Oct 22 17:45
    SethTisue edited #795
  • Oct 22 17:44
    SethTisue edited #795
  • Oct 22 17:44
    SethTisue assigned #795
  • Oct 22 17:44
    SethTisue opened #795
  • Oct 22 17:08
    tlazaro commented #12038
  • Oct 22 15:55
    SethTisue commented #470
  • Oct 22 15:55
    SethTisue milestoned #470
Matt Hicks
@darkfrog26
Oh, and Profig doesn't rely on typesafe-config
I'm honestly surprised that typesafe-config is still so widely used
Rob Norris
@tpolecat
I have had pretty good luck with Ciris.
Matt Hicks
@darkfrog26
I've actually never used that one
at first glance it looks a bit complicated
seems a bit problematic that it has custom types
like their enum support
Rob Norris
@tpolecat
It works great.
Matt Hicks
@darkfrog26
@tpolecat thanks, I made a note to look into it further later. :)
econoraptor
@econoraptor
What's the proper way to get from a type to its corresponding class in a macro? I'm trying this, but the TypeDef invocation results in a MatchError on macro expansion TypeDef(TypeRepr.of[T].classSymbol.get)
Seth Tisue
@SethTisue
@econoraptor what if the type doesn't have a corresponding class?
@econoraptor is this Scala 2 or 3, by the way?
econoraptor
@econoraptor
I'm assuming that's why classSymbol is an option. In this specific case it does have a class
scala 3
Seth Tisue
@SethTisue
oh, I only know macros in 2. maybe someone else can help
gitleet
@gitleet

I'm honestly surprised that typesafe-config is still so widely used

probably b/c playframework ships with it

Rob Norris
@tpolecat
I think Akka also uses it.
Eric K Richardson
@ekrich
Scalafmt uses it or sconfig
Nathan Fischer
@nrktkt:matrix.org
[m]
what are the issues with typesafe/lightbend config?
I know a few things I'd like to improve, but nothing really bad comes to mind
gitleet
@gitleet
I don't like how it returns java collections by default....
Rob Norris
@tpolecat
I don’t like how it uses config files.
1 reply
Seth Tisue
@SethTisue
unless you take Rob's position, HOCON seems quite nice to me
Luis Miguel Mejía Suárez
@BalmungSan
I believe I understand Rob's point. All my HOCONS are just redirects to env vars or constants.
So the config file just becomes more work to maintain and extra source for bugs.
Like having runtime errors because I had a typo in the HOCON file.
I want to try ciris, but it is in the bottom of my TODO list.
Jim Newton
@jimka2001

I am using a library function which I didn't write which as an argument of type => Any. I'd like to prepend some action before and after the object passed to that function. How can I do that?
Here is what I've tried, but it doesn't work.

class MyFunSuite extends AnyFunSuite {
  import org.scalactic.source
  import org.scalatest.Tag
  override def test(testName: String, testTags: Tag*)(testFun: => Any /* Assertion */)(implicit pos: source.Position):Unit = {
    lazy val action = locally{
      println("[ starting " + testName)
      try{      testFun }
      finally{ println("] finished " + testName)}
    }
    super.test(testName,testTags : _*)(action)(pos)
  }
}

When I run my test case I see output like the following which (I believe) means the finally is executed before the testFun

[ starting subclass
] finished subclass
[ starting disjoint
] finished disjoint
[ starting disjoint and subtype
] finished disjoint and subtype
[ starting randomizer
] finished randomizer
[ starting test 1
] finished test 1
[ starting typep
] finished typep
[info] GenusBddTest:
[info] - subclass
[info] - disjoint
[info] - disjoint and subtype
[info] - randomizer
[info] - test 1
[info] - typep
Jim Newton
@jimka2001
The problem is that I have a test which gives an out-of-heap-space error. And if [info] is printed after the test finishes, then the [info] for the problematic test never gets printed.
Alessandro
@ImGrayMouser_twitter

@BalmungSan

They are mutable, they are invariant, they do not have a pretty toString nor a sensible equals

In such a case why the Scala library allows to have Set[Array[A]] when we know upfront that it won't just work ? It's a wrong. At least it must force us to provide a working equal or hashcode or whatever the Set implementation is using under the hood

Jim Newton
@jimka2001
copying the locally{....} directly into the call to super.test(...)(locally{....})(pos) seems to do a better job. At least I can see that it runs the test between printing starting and finished however, it still prints all the [info] lines after all the tests have run.
Jim Newton
@jimka2001
can anyone tell me whether the java reflection API will allow me to somehow walk the subclasses of a given class?
I have some code which tries to reason about whether two given classes (i.e., objects of class java.lang.Class) are disjoint (i.e., have no common subclass) . Currently I'm supposing that a class such as java.lang.Number is not necessarily disjoint from myTrait because it is possible to to create a subclass of Number like this abstract class Xyz extends java.lang.Number with myTrait.
However, if I could detect that that has not occurred, i.e., there is no common subclass of myTrait and java.lang.Number (which is the case 99.9999% of the time), then there is a significant optimization I could make in my data structure.
Rob Norris
@tpolecat
Not in general, no. A program can load classes over the network for example. There’s no way in general to know what’s out there.
It sounds like a design problem.
Jim Newton
@jimka2001
I found this, but I don't know enough about java to know whether it is what I want or not https://www.javadoc.io/doc/org.reflections/reflections/0.9.10/org/reflections/Reflections.html
@tpolecat as far as Java is concerned are these two questions the same? 1. does there currently in VM exist a subclass of a given class X, and 2) does there exist a class which I have not loaded yet which would be a subclass of X if it ever gets loaded? For example in CLOS those are two different questions, the first is answerable, the second is not.
Jim Newton
@jimka2001

If I want to experiment with: https://www.javadoc.io/doc/org.reflections/reflections/latest/org/reflections/Reflections.html is there a way to update my build.sbt file to include the library? I tried the following, but it doesn't work

libraryDependencies += "org.reflections" %% "Reflections" % "0.9.12"

I see the following when I try to start sbt:

[warn]     module not found: org.reflections#Reflections_2.13;0.9.12
[warn] ==== local: tried
[warn]   /Users/jnewton/.ivy2/local/org.reflections/Reflections_2.13/0.9.12/ivys/ivy.xml
[warn] ==== public: tried
[warn]   https://repo1.maven.org/maven2/org/reflections/Reflections_2.13/0.9.12/Reflections_2.13-0.9.12.pom
[warn] ==== local-preloaded-ivy: tried
[warn]   /Users/jnewton/.sbt/preloaded/org.reflections/Reflections_2.13/0.9.12/ivys/ivy.xml
[warn] ==== local-preloaded: tried
[warn]   file:////Users/jnewton/.sbt/preloaded/org/reflections/Reflections_2.13/0.9.12/Reflections_2.13-0.9.12.pom
[warn]     ::::::::::::::::::::::::::::::::::::::::::::::
[warn]     ::          UNRESOLVED DEPENDENCIES         ::
[warn]     ::::::::::::::::::::::::::::::::::::::::::::::
[warn]     :: org.reflections#Reflections_2.13;0.9.12: not found
[warn]     ::::::::::::::::::::::::::::::::::::::::::::::
I see the library exists in https://repo1.maven.org/maven2/org/reflections/reflections/0.9.12. but not sure what syntax to use in the build.sbt file.
Jim Newton
@jimka2001
Seems to work if I replace %% with %.
Rohan Sircar
@rohan-sircar
%% appends the project scala version to the end of the dependency name
so for java libs it should be single %
(as that is a java lib)
Rob Norris
@tpolecat
@jimka2001 there is no way to iterate loaded classes as far as I know. The reflections library above will scan your classpath if it can, but this isn't possible in general.
"classpath" is only a meaningful idea for certain kinds of classloaders.
Jim Newton
@jimka2001
@tpolecat yes it seems reflections doesn't really work. The following prints [] without realizing that Class1 is a subclass of Abstract1 :-(
object sanityTest {
  def main(argv: Array[String]):Unit = {
    import genus._

    import org.reflections.Reflections
    val reflections = new Reflections("cl-robdd-scala")
    abstract class Abstract1
    trait Trait1
    class Class1 extends Abstract1 with Trait1
    println(reflections.getSubTypesOf(classOf[Abstract1]))
  }
}
Jim Newton
@jimka2001
although I wonder whether I'm doing something wrong, as at least getSubTypesOf should know that Abstract1 is a subtype of itself.
I wonder that the argument to the constructor new Reflections(...) is supposed to be. It seems to work (create an object) even if I give it the name of a non-existent project.

Interesting, when I use "" as the argument of the constructor, I get something more promising.

object sanityTest {
  def main(argv: Array[String]):Unit = {
    import genus._

    import org.reflections.Reflections
    val reflections = new Reflections("")
    abstract class Abstract1
    trait Trait1
    class Class1 extends Abstract1 with Trait1
    abstract class Class2 extends java.lang.Number

    println(reflections)
    println(reflections.getSubTypesOf(classOf[Abstract1]))
    println(reflections.getSubTypesOf(classOf[java.lang.Number]))
  }
}

This prints:

org.reflections.Reflections@229d10bd
[class rte.sanityTest$Class1$1]
[class rte.sanityTest$Class2$1]
kiti_Nomad
@Kiti-Nomad
scala3 is released, new features include ceylon's set theory type.
Dale Wijnand
@dwijnand
What's that? Can't find that working on Google.
Luis Miguel Mejía Suárez
@BalmungSan
@ImGrayMouser_twitter because Set is defined as generic for all types, and they exploit the fact that at runtime any value would have a equals and hashcode methods to implement it. Now, that implies that the Set will behave according to the underlying elements.