标签: dotty

Scala 3不会图灵完整吗?

我参加了Martin Odersky关于Scala未来的主题演讲:

https://skillsmatter.com/skillscasts/8866-from-dot-to-dotty

在1:01:00,对观众问题的回答似乎表明未来的Scala将不会是图灵完整的.

我理解正确吗?Scala 3将不再是图灵完整吗?如果是这样,对于像我这样每天在工作中使用Scala解决实际问题的人会产生什么样的实际影响呢?换句话说,工业Scala程序员松散了什么,他们通过删除图灵完整性获得了什么?

scala turing-complete dotty

5
推荐指数
2
解决办法
827
查看次数

使用Intellij IDE运行Scala Dotty项目

我使用Dotty模板创建了一个基本的Scala Dotty项目,并将该项目导入Intellij IDE。

当我使用sbt命令行时,一切正常。

当我尝试在Intellij IDE中构建或运行它时,出现以下错误:

Error:scalac: Multiple 'scala-library*.jar' files (scala-library-0.9.0-RC1.jar, scala-library-2.12.6.jar) in Scala compiler classpath in Scala SDK sbt: ch.epfl.lamp:dotty-library_0.9:0.9.0-RC1:jar

任何想法如何解决这个问题?

scala intellij-idea dotty

4
推荐指数
1
解决办法
893
查看次数

Scala 3 中的类型推断变化

Scala 3 将在类型推断方面带来哪些变化?当前文档只是说明TODO。例如,

弱一致性

斯卡拉 2.13

scala> val i: Int = 42
val i: Int = 42

scala> val c: Char = 'a'
val c: Char = a

scala> List(i,c)
val res0: List[Int] = List(42, 97)
Run Code Online (Sandbox Code Playgroud)

Scala 3 (dotty 0.24.0-RC1)

scala> val i: Int = 42
val i: Int = 42

scala> val c: Char = 'a'
val c: Char = a

scala> List(i,c)
val res0: List[AnyVal] = List(42, a)
Run Code Online (Sandbox Code Playgroud)

平等

斯卡拉 2.13

scala> 42 == Some(42) …
Run Code Online (Sandbox Code Playgroud)

scala type-inference dotty scala-3

4
推荐指数
1
解决办法
342
查看次数

如何使用匹配类型实现 SKI 组合器演算?

我试图使用匹配类型在 Dotty 中实现SKI 组合器演算

SKI 组合子演算的快速描述:

  • S, K, 和I是项
  • (xy)是一个术语 ifx并且y是术语并且就像函数应用程序
  • (((Sx)y)z)(与 相同Sxyz)返回xz(yz)(与 相同(xz)(yz)
  • ((Kx)y)(同Kxy)返回x
  • (Ix) 返回 x

以下是我使用的(R尽可能减少术语)。一个术语(xy)被写成一个元组(x,y)SK, 和I是特征。

trait S
trait K
trait I

type R[T] = T match {
  case (((S,x),y),z) => R[((x,z),(y,z))]
  case ((K,x),y) => R[x]
  case (I,x) => R[x]
  case (a,b) …
Run Code Online (Sandbox Code Playgroud)

types scala pattern-matching dotty scala-3

4
推荐指数
1
解决办法
203
查看次数

Scala 3 - 在一阶类型上提取包装器元组和 InverseMap

我正在尝试创建一个函数,它采用高级类型的元组并将函数应用于高级类型中的类型。

在下面的例子中,有一个trait Get[A]是我们的高级类型。还有一个 Get's: 元组(Get[String],Get[Int])以及来自(String,Int) => Person.

Scala-3 有一个名为 InverseMap 的匹配类型,它将类型 (Get[String], Get[Int]) 转换为本质上的类型 (String,Int)。

所以最终目标是编写一个函数,它可以接受一个任意数量Get[_]类型的元组和一个输入与 InserveMap 类型匹配的函数,并最终返回 a Get[_],其中包装的类型是函数的结果。

我试图创建一个genericF在下面调用的函数来显示所需的行为,尽管它可能不正确——但我认为它至少显示了正确的意图。

  case class Person(name: String, age: Int)
  trait Get[A] {
    def get: A
  }
  case class Put[A](get: A) extends Get[A]
    
  val t: (Get[String], Get[Int]) = (Put("Bob"), Put(42))
  
  val fPerson: (String,Int) => Person = Person.apply _
  
  def genericF[T<:Tuple,I<:Tuple.InverseMap[T,Get],B](f: I => B, t: T): Get[B] = ???
  val person: Get[Person] = …
Run Code Online (Sandbox Code Playgroud)

scala tuples dotty scala-3

4
推荐指数
1
解决办法
343
查看次数

Scala3 基本类型和覆盖的扩展 ==

学习 Scala3 扩展和 CanEqual 概念,但发现扩展 Int 的某些特性有困难。

在以下示例中,我可以轻松地向 Int 添加 >= 功能以将其与 RationalNumber 案例类进行比较,但无法修改 == 的行为。(注 1~2 与 RationalNumber(1,2) 相同)。

这个问题似乎与基本的 AnyVal 类型以及 Scala 如何传​​递给 Java 来处理 equals 和 == 相关。

case class RationalNumber(val n: Int, val d: Int):
  def >=(that:RationalNumber) = this.num * that.den >= that.num * this.den
  //... other comparisons hidden (note not using Ordered for clarity)
  private def gcd(a: Int, b: Int): Int = if (b == 0) a else gcd(b, a % b)
  val sign = …
Run Code Online (Sandbox Code Playgroud)

extension-methods scala equals dotty scala-3

4
推荐指数
1
解决办法
72
查看次数

Dotty中给出的如何使用?

我正在查看页面Dotty下的文档Contextual Abstractions,我看到了Given Instances.

给定实例(或简单地说,“给定”)定义了某些类型的“规范”值,用于将参数合成给给定的子句。例子:

trait Ord[T] {
  def compare(x: T, y: T): Int
  def (x: T) < (y: T) = compare(x, y) < 0
  def (x: T) > (y: T) = compare(x, y) > 0
}

given intOrd: Ord[Int] {
  def compare(x: Int, y: Int) =
    if (x < y) -1 else if (x > y) +1 else 0
}

given listOrd[T]: (ord: Ord[T]) => Ord[List[T]] {

  def compare(xs: List[T], ys: List[T]): Int = …
Run Code Online (Sandbox Code Playgroud)

scala implicit sbt dotty scala-3

3
推荐指数
1
解决办法
340
查看次数

给定关键字如何在 Scala 3 或 dotty 中工作?

我正在阅读 Scala 3 文档。他们引入了given关键字,被认为是 Scala 2 的替代品implicit。代码在这里

trait Ord[T] {
  def compare(x: T, y: T): Int
  def (x: T) < (y: T) = compare(x, y) < 0
  def (x: T) > (y: T) = compare(x, y) > 0
}

given intOrd: Ord[Int] {
  def compare(x: Int, y: Int) =
    if (x < y) -1 else if (x > y) +1 else 0
}

given listOrd[T]: (ord: Ord[T]) => Ord[List[T]] {

  def compare(xs: List[T], ys: List[T]): Int …
Run Code Online (Sandbox Code Playgroud)

scala implicit typeclass dotty scala-3

3
推荐指数
1
解决办法
783
查看次数

不能使用 flatMap 作为自写 monad 实例的扩展方法

我尝试在 WriterT 上使用 flatMap 并且成功了。

所以问题可能出在我的类型上,但我找不到它有什么问题。

import cats.Monad
import cats.syntax.flatMap._

object Main extends App {
    type Optional[A] = A | Null
    
    val maybeInt1: Optional[Int] = 1
    val maybeInt2: Optional[Int] = null
    
    given Monad[Optional] with {
        def pure[A](x: A): Optional[A] = x
        def flatMap[A, B](fa: Optional[A])(f: A => Optional[B]): Optional[B] = {
            fa match {
                case null => null
                case a: A => f(a)
            }
        }
        def tailRecM[A, B](a: A)(f: A => Optional[Either[A, B]]): Optional[B] = {
            f(a) match {
                case …
Run Code Online (Sandbox Code Playgroud)

scala dotty scala-cats scala-3

3
推荐指数
1
解决办法
206
查看次数

dotty/scala3 与 scala-native 和 scala-js 等技术的无缝集成度如何?

有什么限制是我们应该注意的吗?它是否需要我们使用一些类似 scalafix 的工具?或者它会开箱即用吗?

scala dotty scala-3

2
推荐指数
1
解决办法
248
查看次数