小编Sim*_*ins的帖子

用于子类类型的Circe编码器/解码器

鉴于以下ADT

sealed abstract class GroupRepository(val `type`: String) {
  def name: String
  def repositories: Seq[String]
  def blobstore: String
}
case class DockerGroup(name: String, repositories: Seq[String], blobstore: String = "default") extends GroupRepository("docker")
case class BowerGroup(name: String, repositories: Seq[String], blobstore: String = "default") extends GroupRepository("bower")
case class MavenGroup(name: String, repositories: Seq[String], blobstore: String = "default") extends GroupRepository("maven")
Run Code Online (Sandbox Code Playgroud)

其中值type用于解码要实例化的实例.

如何自动(或半自动)派生编码器和解码器,我得到以下行为:

> println(MavenGroup("test", Seq("a", "b")).asJson.spaces2)
{
  "type" : "maven",
  "name" : "test",
  "repositories" : [
     "a",
     "b"
  ],
  "blobstore" : "default"
}
> …
Run Code Online (Sandbox Code Playgroud)

scala circe

8
推荐指数
1
解决办法
662
查看次数

Scala 3 匹配类型和 F-Bounded 类型:“无法证明”

鉴于:

abstract class Quantity[A <: Quantity[A]]
sealed trait UnitOfMeasure[A]

class Time extends Quantity[Time]
object Minutes extends UnitOfMeasure[Time]

class PowerRamp extends Quantity[PowerRamp]
object KilowattsPerHour extends UnitOfMeasure[PowerRamp]
  
type Test[X <: UnitOfMeasure[?]] = X match
  case UnitOfMeasure[t] => t
Run Code Online (Sandbox Code Playgroud)

编译如下:

summon[Test[Minutes.type] =:= Time]
summon[Test[KilowattsPerHour.type] =:= PowerRamp]
Run Code Online (Sandbox Code Playgroud)

但是,如果UnitOfMeasure声明了trait :

sealed trait UnitOfMeasure[A <: Quantity[A]]
Run Code Online (Sandbox Code Playgroud)

两次传票都失败:

Cannot prove that Test[Minutes.type] =:= Time.

Note: a match type could not be fully reduced:
  trying to reduce Test[Minutes.type]
  failed since selector Minutes.type
  matches none of the …
Run Code Online (Sandbox Code Playgroud)

scala type-level-computation scala-3

7
推荐指数
0
解决办法
84
查看次数

没有任何SQL工具的安装

安装Visual Studio 2010 Professional时,我只选择以下项目:

Visual Studio 2010安装选择

但是,安装完成后,我看到我的计算机上装满了我不想要的软件,例如:

  • Microsoft SQL Server 2008 R2数据层应用程序框架
  • Microsoft SQL Server 2008 R2数据层应用程序项目
  • Microsoft SQL Server 2008 R2管理对象
  • Microsoft SQL Server 2008 R2管理对象(x64)
  • Microsoft SQL Server 2008 R2 Transact-SQL语言服务
  • Microsoft SQL Server Compact 3.5 SP2 ENU
  • Microsoft SQL Server Compact 3.5 SP2 x64 ENU
  • Microsoft SQL Server数据库发布向导1.4
  • Microsoft SQL Server系统CLR类型
  • Microsoft SQL Server系统CLR类型(x64)

有没有办法安装Visual Studio没有所有这些"额外"?

visual-studio-2010

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

在映射上的模式匹配

例如,想象您有以下内容:

import play.api.data._
import play.api.data.Forms._
case class TestDomainClass(text: String, number: Int, date: DateTime, long: Long, boolean: Boolean)
val testForm = Form(
  mapping(
    "textField" -> text,
    "numberField" -> number,
    "dateField" -> jodaDate,
    "longField" -> longNumber,
    "booleanField" -> boolean
  )(TestDomainClass.apply)(TestDomainClass.unapply)
)
Run Code Online (Sandbox Code Playgroud)

我的目标是在每个字段的参数类型上进行模式匹配.例如:对于textField参数类型将是String,并且对于dateField将是org.joda.time.DateTime.


第一次尝试解决

def typeOfMappingUsingTypeTag[T: TypeTag](m: Mapping[T]) = typeOf[T] match {
  case t if t =:= typeOf[String] => println("type is String")
  case t if t =:= typeOf[Int] => println("type is Int")
  case t if …
Run Code Online (Sandbox Code Playgroud)

scala playframework-2.0

6
推荐指数
1
解决办法
240
查看次数

编译时保证映射对于每个枚举情况都有一个键

给定以下枚举:

enum Connector:
  case CHAdeMO
  case Mennekes
  case CCS
  case Tesla
Run Code Online (Sandbox Code Playgroud)

是否有类似Map[ConnectorType, Int]但会产生编译错误的类型:

Map(
  Connector.CHAdeMO -> 1,
  Connector.Mennekes -> 2,
  Connector.CCS -> 3,
)
Run Code Online (Sandbox Code Playgroud)

也就是说,地图不包含 的键Connector.Tesla。换句话说,在编译时,类型应该类似于((Connector.CHAdeMO, Int), (Connector.Mennekes, Int), (Connector.CCS, Int), (Connector.Tesla, Int))常规 Map,但在其他方面表现得像常规 Map。

scala scala-3

6
推荐指数
1
解决办法
146
查看次数

类型类派生访问默认值

使用镜像在 Scala 3 中执行类型类派生时,是否有一种干净的方法来访问案例类字段的默认值?例如:

case class Foo(s: String = "bar", i: Int, d: Double = Math.PI)
Run Code Online (Sandbox Code Playgroud)

Mirror.Product.MirroredElemLabels将被设置为("s", "i", "d")。有没有类似的东西:(Some["bar"], None, Some[3.141592653589793])

如果不能,这可以使用宏来实现吗?我可以同时使用镜像和宏来派生类型类实例吗?

scala typeclass scala-macros generic-derivation scala-3

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

无标签final中的parSequence和parTraverse

使用 tagless final(不使用 IO,而是使用通用 F)我如何抽象出这样的东西:

def doSomething(s: String): IO[Unit] = ???

List("authMethods", "secretEngines", "plugins", "CAs", "common").parTraverse(doSomething)
Run Code Online (Sandbox Code Playgroud)

我能得到的最接近的是parTraverseN从 Concurrent 对象中使用,但我认为这将并发运行而不是并行运行(如在parallelism 中)。这也迫使我选择一个nwhere as parTraversenot。

列表的大小只是一个例子,它可能更大。doSomething是一个纯函数,它的多次执行可以毫无问题地并行运行。

理想情况下,鉴于doSomething返回,IO[Unit]我想抽象parTraverse_F具有正确类型类实例的 。

scala cats-effect

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

键入错误推断

给出以下代码:

implicit class RichString(s: String) {
  def !![T](createMessage: Long => T) = ()
}
case class SomeClass(i: Int, s: String, id: Long)
Run Code Online (Sandbox Code Playgroud)

为什么这样:

"some string" !! SomeClass(5, "test", _)
Run Code Online (Sandbox Code Playgroud)

不编译,抛出以下错误:

Missing parameter type for expanded function ((x$1) => "some string".$bang$bang(SomeClass(5, "test", x$1)))
 "some string" !! SomeClass(5, "test", _)
                                       ^

Type mismatch;
 found   : cmd1.SomeClass
 required: Long => cmd1.SomeClass "some string" !! SomeClass(5, "test", _)
Run Code Online (Sandbox Code Playgroud)

但所有这些都编译得很好:

val f = SomeClass(5, "test", _)
"some string" !! f

"some string" !! ( SomeClass(5, …
Run Code Online (Sandbox Code Playgroud)

scala

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

编译器选项警告与 linter

在 Scala 2.12 中,这些选项之间有什么区别:

  • -Xlint:adapted-args 对比 -Ywarn-adapted-args
  • -Xlint:nullary-unit 对比 -Ywarn-nullary-unit
  • -Xlint:inaccessible 对比 -Ywarn-inaccessible
  • -Xlint:nullary-override 对比 -Ywarn-nullary-override
  • -Xlint:infer-any 对比 -Ywarn-infer-any

如果不是,使用哪个更有意义?我也用fatal-warnings, 和几乎所有-Ywarn-Xlint选项进行编译。

scala

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

具有更高种类类型的类的自类型注释

鉴于:

abstract class Databases[F[_]]
Run Code Online (Sandbox Code Playgroud)

我怎样才能使这个特性起作用:

// Marker trait signalling the database plugin supports StaticRoles
trait StaticRoles { this: Databases[_] => }
Run Code Online (Sandbox Code Playgroud)

我想确保StaticRoles只混合在也扩展的类中Databases,但是我不关心类型参数的具体值F

代码返回:

error: _$1 takes no type parameters, expected: one
Run Code Online (Sandbox Code Playgroud)

这是公平的,但是它返回相同的错误:

trait StaticRoles { this: Databases[_[_]] => }
Run Code Online (Sandbox Code Playgroud)

我也试过:

trait StaticRoles { this: Databases[({type T[X[_]]})#T] => }
Run Code Online (Sandbox Code Playgroud)

这给出了错误:

error: kinds of the type arguments (AnyRef{type T[X[_]]}#T) do not conform to the expected kinds of the type parameters (type F) in class Databases.
       AnyRef{type …
Run Code Online (Sandbox Code Playgroud)

scala existential-type self-type higher-kinded-types

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