Giter VIP home page Giter VIP logo

Comments (7)

sjrd avatar sjrd commented on June 22, 2024

Yes, widening singleton types of paths that can be substituted later creates established unsoundness issues. See #19746

from scala3.

smarter avatar smarter commented on June 22, 2024

Thanks for the reference. A possibly viable workaround is to use a wrapper type:

import scala.language.experimental.namedTuples

class Wrapper[T](x: T)
object Wrapper:
  type Extract[W <: Wrapper[?]] = W match
    case Wrapper[t] => t

object Test:
  val f: (name: String, age: Int) = ???
  val f2 = Wrapper(f)
  val x: NamedTupleDecomposition.Names[Wrapper.Extract[f2.type]] = ("name", "age")

Not sure if there's a better way or if that can help suggest some more systematic fix.

from scala3.

soronpo avatar soronpo commented on June 22, 2024

@smarter what if we explicitly create a Widen type operation? So Names will be implemented as Widen[X] match ...

from scala3.

smarter avatar smarter commented on June 22, 2024

That would reopen the soundness hole of #19746 if Widen[this.type] can reduce to different types depending on the context.

from scala3.

soronpo avatar soronpo commented on June 22, 2024

I'm not sure that will happen, because of the lazy nature of singleton ops operations.

from scala3.

smarter avatar smarter commented on June 22, 2024

Though note that the fix for #19746 (0a3497b) specifically target singleton types coming from parameters (since those can be substituted), so maybe something like a widenSingletonOfNonParamRef operation? It's not clear to me that this is enough if the underlying type of a non-param singleton is a GADT, in which case maybe the original hole isn't fixed.

from scala3.

smarter avatar smarter commented on June 22, 2024

in which case maybe the original hole isn't fixed.

Indeed: #20515.

from scala3.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.