小编Bog*_*nko的帖子

什么是类型,什么是scala中的类型构造函数

我有点困惑的东西理解typescala手段.

在文档中,我读到的List[Int]是一个类型,List是一个类型构造函数.

type但当我写下以下内容时,关键字是什么意思?

val ls: scala.collection.immutable.List.type = scala.collection.immutable.List
Run Code Online (Sandbox Code Playgroud)

例如,与此type相关的type内容可以定义为特征中的字段.

scala

14
推荐指数
2
解决办法
3121
查看次数

不了解Monoid定义中的态素表示法

我试图Monoid从类别理论的角度理解什么,但是我与用来描述它的符号有些混淆。这是维基百科:

在范畴论中,在一个单曲面范畴(C,α,I)中的一个单曲面(或单曲面对象)(M,?,I)是一个具有两个同态的对象M

?:M?M?M称为乘法

?: 一世 ?M称为单位

我对态素表示法感到困惑。为什么二进制运算?是射态符号的一部分?我对态射的理解是,它是一种可以从一种类型映射到另一种类型(域到共域)的函数,例如M ? M。为什么操作?是定义中域的一部分?第二个困惑是关于I。为什么是I域名?根本没有I对象Monoid。它只是对象的中性元素M

我知道这Monoid是一个具有一个对象,同一性同态和在该对象上定义的二进制运算的类别,但是这种表示法使我认为我不了解某些内容。

M ? M莫名其妙相关笛卡尔积,因此该射的域定义M x M

编辑:数学栈交换上,我的问题得到了非常有帮助的答案。

haskell category-theory monoids

10
推荐指数
1
解决办法
314
查看次数

在模式匹配中使用的抽象类型上键入不匹配

此代码编译错误:

def f1[T](e: T): T = e match {
  case i:Int => i
  case b:Boolean => b
}
// type mismatch;
// found   : i.type (with underlying type Int)
// required: T
// case i:Int => i ...
Run Code Online (Sandbox Code Playgroud)

从类型检查角度看,实现GADT的代码看起来非常相同,但编译时没有错误:

sealed trait Expr[T]
case class IntExpr(i: Int) extends Expr[Int]
case class BoolExpr(b: Boolean) extends Expr[Boolean]

def eval[T](e: Expr[T]): T = e match {
  case IntExpr(i) => i
  case BoolExpr(b) => b
}
Run Code Online (Sandbox Code Playgroud)

在两种情况下,在模式匹配表达式中,我们知道ibIntBoolean.为什么第一个例子编译失败而第二个例子成功?

generics scala

9
推荐指数
1
解决办法
236
查看次数

与Cats进行ZIO互操作的并行操作

ZIO不依赖于Cats,因此它具有自己的执行sequence操作的方法: ZIO.sequenceParZIO.sequence

我尝试使用sequenceinterop提供的Cats,它的工作方式与ZIO.sequence

import zio._
import zio.interop.catz._
import cats.implicits._ 

val t1: Task[Int] =  ???
val t2: Task[Int] =  ???
val t3: Task[Int] =  ???

val seq = List(t1,t2,t3).sequence // <-- t1,t2,t3 are executed sequentially 

(new DefaultRuntime {}).unsafeRun(seq)
Run Code Online (Sandbox Code Playgroud)

我可以ZIO将其sequence视为ZIO.sequencePar,这样我可以并行运行任务吗?

似乎ZIO需要一些Traversefor 的parallel 实现Cats,但我找不到任何实现。

这是我的依赖项:

libraryDependencies += "dev.zio" %% "zio" % "1.0.0-RC10-1"
libraryDependencies += "dev.zio" %% "zio-interop-cats" …
Run Code Online (Sandbox Code Playgroud)

scala zio

6
推荐指数
0
解决办法
215
查看次数

如何从 Visual Studio Code UI 执行 dotty 代码

我正在尝试使用Visual Studio Code来运行 dotty 代码。我开始使用IDEsbt launchIDE根据来自指令这个页面,我也安装Dotty Language ServerCode Runner扩展。Dotty 是使用安装的brew,我可以从 CMD 编译和执行 dotty 代码。

问题是我无法运行此代码,Visual Studio Code因为我Code Runner试图使用 scala 而不是 dotty 来执行它。

找不到任何有用的配置来调整此插件以使用 dotty。

有什么方法可以让它从 Visual Studio Code UI 工作吗?

scala dotty visual-studio-code scala-3

5
推荐指数
1
解决办法
672
查看次数

无礼的副产品子类型

我试图至少在Scala 2.13中模拟联合类型的某些方面。

到目前为止,满足我需求的最佳方法是coproduct精打细算。唯一的问题是子类型不能按我预期的那样工作。这是一个例子:

import shapeless._

type ISB = Int :+: String :+: Boolean :+: CNil

type ISBSub = Int :+: String :+: CNil

implicitly[ISBSub <:< ISB] // error here
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建一个带有类型参数的方法,ISB并希望它也def接受ISBSub

def test(t: ISB) = ???

test(Coproduct[ISBSub](2)) // not working
Run Code Online (Sandbox Code Playgroud)

有什么办法可以实现这样的目标coproduct吗?

scala shapeless

5
推荐指数
1
解决办法
75
查看次数

为什么方法需要“抽象覆盖”修饰符

trait Base {
  def someMethod: Unit
}

trait SomeTrait extends Base {
  abstract override def someMethod: Unit = ???
}

class SomeTraitImp extends SomeTrait with Base {
  override def someMethod: Unit = ???
}
Run Code Online (Sandbox Code Playgroud)

错误消息状态:

错误:在类型=>单位的特征SomeTrait中覆盖方法someMethod;方法someMethod需要“抽象覆盖”修饰符覆盖def someMethod:单位= ???

为什么Scala编译器会限制我覆盖此方法而不将其标记为抽象?

编辑:

我检查了这个答案,它解释了为什么abstract当我们引用super该方法时可能需要实现的方法上为什么需要关键字。

在我来说,我只是想覆盖someMethodSomeTrait通过全新的实现,而不是试图打电话super.someMethod

这种覆盖会在运行时破坏某些东西吗?

scala

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

在Scala中将List [Try [T]]尝试为[List [T]]

我想知道如何在Scala中将List [Try [T]]转换为Try [List [T]]?

我已经尝试过使用累加器并向右折叠,但这似乎并不理想。

functional-programming scala scalaz scala-cats

3
推荐指数
2
解决办法
122
查看次数

是否可以在 http4s 服务器上的多个 http 请求之间共享纯 FP 状态?

我正在尝试在http4s服务器上的多个 http 请求之间共享状态。

这就是我尝试过的:

for {
     state  <- Ref[F].of(0)
 
    _ <- BlazeServerBuilder[F]
         .bindHttp(port, host)
         .withHttpApp( ... httpApp that has link to "state" ... )
         .serve.compile.lastOrError

} yield  () 
Run Code Online (Sandbox Code Playgroud)

在 http 请求中更改状态后,状态保持不变。

是否可以使用Ref或 中的东西以纯 FP 风格共享“状态” Fs2

更新:问题出在我的应用程序中。与我如何通过 Ref 无关。我的错。

scala scala-cats http4s fs2

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