https://linen.dev logo
Join Discord
Powered by
# 🆕scala3
  • z

    Zumi Zoom

    06/25/2025, 8:43 AM
    tracked使わなくても自分でrefinementを形に追加したら同じ結果かもしれませんが、trackedは便利ですね
  • x

    xuwei-k

    06/25/2025, 8:45 AM
    これは
    Int
    にしただけだけど、singleton typeにしたい場合もあるしな
  • w

    windymelt

    06/25/2025, 9:22 AM
    Auxパターンを剥がしたい、というのがモチベーションだと公式には書かれているなあ
  • x

    xuwei-k

    06/25/2025, 9:43 AM
    AuxパターンってどのAuxパターンなんだ・・・というのもある(一部の?単純な?やつはそもそもScala 3で必要なくなったはずでは・・・
  • k

    Kory

    06/27/2025, 2:38 PM
    自分でやろうとしてもどうしてもキャストが必要になるんですよね
  • k

    Kory

    06/27/2025, 2:43 PM
    ん?ほんとか?キャストが常に要るわけではない気がしてきました、ちょっと確かめてきます
  • k

    Kory

    06/27/2025, 2:46 PM
    Copy code
    Scala
    case class LatticePoint(x: Int, y: Int)
    
    class LatticePointTracked[X <: Int, Y <: Int](x: X, y: Y) extends LatticePoint(x, y)
    
    val lp3: LatticePointTracked[Int, 3] = LatticePointTracked(10, 3)
    val lp3Upcast: LatticePoint { val y: 3 } = lp3
    
    val lp3UpcastOneLine: LatticePoint { val y: 3 } = LatticePointTracked(10, 3)
    case class
    を
    extends
    してやれば(かなりやりたくないですが)一応 Scala 3.6.3 でもいけそうですね でも
    case class
    を
    extends
    したくない… 🥹(そもそも
    final
    の気持ちで居たい…)
  • k

    Kory

    06/27/2025, 2:51 PM
    現状のコンストラクタ(や、付随する
    apply()
    ) は引数に関する正確な型情報というのを (引数を、↑のコードの
    LatticePointTracked
    にあるように、それに対応する型引数と共に受け付けたりしない限り) 基本的に完全に捨てていて、例えば
    Copy code
    scala
    case class LatticePoint(x: Int, y: Int)
    type PositiveInt <: Int // Iron などで得られる refinement type
    
    val x1: Int = -3
    val y1: PositiveInt = 5
    
    val ptInUpperHalfPlane: LatticePoint = LatticePoint(x1, y1)
    と書いたときに、`ptInUpperHalfPlane.y` が実のところただの
    Int
    ではなくて、もっと強く
    PositiveInt
    であったのだ、という情報は永久に失われることになります。これを
    tracked
    って書くだけでもっと正確な型を付けられるようにしましょう、という proposal だと理解しています 👀
  • z

    Zumi Zoom

    06/27/2025, 2:51 PM
    そうですね、キャストが必要じゃないと思いましたが、実は必要なのですね
  • k

    Kory

    06/27/2025, 2:52 PM
    refinement type をデータ型の中に貫通させられるようになるというのは(特に、refinement type をすでに使っているのなら)実用上かなり便利だと思います
  • k

    Kory

    06/27/2025, 2:54 PM
    上のコードが
    Copy code
    Scala
    final case class LatticePoint(x: Int, y: Int)
    として宣言されているような場合ですと、`LatticePoint` をこれ以上 refine するのは不可能そうです(`LatticePoint` を構築するような式があったとき、その式には (path dependent type 以外の)
    LatticePoint
    の部分型が付くことがあり得ないので、`LatticePoint { x : 42 }` のような型の値を構築できなくなってしまうと思います)
  • z

    Zumi Zoom

    06/27/2025, 3:23 PM
    そうですね。先、case classのコンストラクタはprecise typeをいつも持っていて、依頼がない場合ならその後消えすと思います。。union typeの場合みたいですね。実はそんなことは全然ありません。trackedのproposalは、そのどおり工夫をつけるつもりですね。 (日本語勉強中で、理解は難しいなんですが、誤解があったらごめんなさい)
  • x

    xuwei-k

    06/28/2025, 3:23 AM
    よく考えたらここでAuxパターン使ったな https://github.com/wartremover/wartremover/blob/7d9768c54b4eb216d4bfbbb97dafdcaf4ecd62be/core/src/main/scala-3/org/wartremover/WartUniverse.scala#L11
  • u

    unarist

    07/10/2025, 8:46 AM
    これ scala-cli ごと落ちるのは issue チャンスだったりします?
    Copy code
    $ scala-cli
    Welcome to Scala 3.7.0 (11.0.4, Java OpenJDK 64-Bit Server VM).
    Type in expressions for evaluation. Or try :help.
    
    scala> Seq.empty[[T >: Int] =>> T => ?].head(1)
    Exception in thread "main" java.lang.AssertionError: assertion failed: invalid prefix HKTypeLambda(List(T), List(TypeBounds(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class Int),TypeRef(ThisType(TypeRef(NoPrefix,module class scala)),class Any))), AppliedType(TypeRef(ThisType(TypeRef(NoPrefix,module class scala)),trait Function1),List(TypeParamRef(T), TypeBounds(TypeRef(ThisType(TypeRef(NoPrefix,module class scala)),class Nothing),TypeRef(ThisType(TypeRef(NoPrefix,module class scala)),class Any)))))
            at scala.runtime.Scala3RunTime$.assertFailed(Scala3RunTime.scala:8)
            at dotty.tools.dotc.core.Types$NamedType.<init>(Types.scala:2301)
            at dotty.tools.dotc.core.Types$TypeRef.<init>(Types.scala:2938)
            at dotty.tools.dotc.core.Types$CachedTypeRef.<init>(Types.scala:2995)
    ...
  • u

    unarist

    07/10/2025, 10:28 AM
    https://x.com/unarist/status/1943255151814517109 遊んでました
  • u

    unarist

    07/11/2025, 6:57 AM
    いいタイトルが浮かばなかったので、とりあえずこれで…… https://github.com/scala/scala3/issues/23504
  • x

    xuwei-k

    07/11/2025, 8:39 AM
    > odersky self-assigned this になってた
  • w

    windymelt

    07/11/2025, 5:32 PM
    大先生みずから
  • u

    unarist

    07/11/2025, 6:09 PM
    scala3 compiler ちょっといじって動かすの面倒かなーと思っていたんですが、cloneしてsbtしてreplするだけで動いた。めっちゃ簡単…。
  • u

    unarist

    07/14/2025, 7:51 PM
    `-Xsource:3 -quickfix`、なんか
    .map(X)
    が
    .map(X.apply)
    じゃなくて
    .map(.applyX)
    に書き換えられるケースがあって謎…条件がよくわからない…
  • x

    xuwei-k

    07/24/2025, 11:43 AM
    https://x.com/xuwei_k/status/1948343370205819292
  • x

    xuwei-k

    07/30/2025, 4:36 AM
    https://xuwei-k.hatenablog.com/entry/2025/07/30/133155
  • x

    xuwei-k

    08/01/2025, 9:49 PM
    https://github.com/scala/scala3/releases/tag/3.7.2
  • x

    xuwei-k

    08/01/2025, 11:32 PM
    bug見つけた気がする https://github.com/scala/scala3/issues/23651
  • x

    xuwei-k

    08/02/2025, 1:51 AM
    bugじゃない扱いになった…
  • x

    xuwei-k

    08/02/2025, 3:30 AM
    いや指定方法変えて変わらんが…
  • x

    xuwei-k

    08/02/2025, 8:20 AM
    なんか伝わった
  • x

    xuwei-k

    08/22/2025, 2:04 AM
    https://github.com/scala/scala3/pull/23786 パターンマッチの機能拡張されてた
  • t

    tanishiking

    08/25/2025, 11:12 AM
    https://dotty.epfl.ch/docs/reference/experimental/capture-checking/index.html nightlyのドキュメントでcapture checkingの解説がかなり増えたみたい 読んでいこう〜(ScalaDaysで話聞いたけどあんまり分からなかった😵)
  • w

    windymelt

    08/25/2025, 3:24 PM
    解説増えるの嬉しい!!