关于类型细化语法的困惑

2023-12-01

在类型级别上,我偶然发现以下内容:

sealed abstract class StSource[A] {
  type S
  def init: S            // create the initial state
  def emit(s: S): (A, S) // emit a value, and update state
}

object StSource {
  type Aux[A, S0] = StSource[A] {type S = S0}

  def apply[A, S0](i: S0)(f: S0 => (A, S0)): Aux[A, S0] =
    new StSource[A] {
      type S = S0
      def init = i
      def emit(s: S0) = f(s)
    }
}

令我感兴趣的那条线是type Aux[A, S0] = StSource[A] {type S = S0}

尤其{type S = S0} in StSource[A] {type S = S0}

我真的不知道如何阅读这篇文章,就像解释这里涉及的结构一样。

What is StSource[A] {type S = S0}???是一种结构类型(部分看起来像这样)

当定义像特征或类这样的类型时,类的主体是类本身表示的类型构造函数的一部分吗?其中的方法发生了什么?

真的很困惑。有人可以解构吗?


StSource[A] {type S = S0}属于精致型。{type S = S0}是一种类型细化。

从一方面来看,StSource[A] {type S = S0}是一个子类型StSource[A].

从另一边看,StSource[A]也是一种存在主义类型StSource[A] {type S = S0},即StSource[A] is StSource.Aux[A, _] (aka StSource.Aux[A, X] forSome {type X}).

def test[A, S] = {
  implicitly[StSource.Aux[A, S] <:< StSource[A]]
  implicitly[StSource.Aux[A, _] =:= StSource[A]]
  implicitly[StSource[A] =:= StSource.Aux[A, _]]
}

https://scala-lang.org/files/archive/spec/2.13/03-types.html#compound-types

A 复合型

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于类型细化语法的困惑 的相关文章

  • 不明白这个 haskell 代码中的内容

    我有一些 Haskell 代码 我正在尝试完成它 但我不明白其中发生了什么 type Bag a a gt Int emptyB Bag a emptyB e gt 0 countB Eq a gt Bag a gt a gt Int co
  • Maven SBT 依赖工件?

    我同时使用 Maven 和 SBT 管理我的项目 其原因有 Intellij IDEA无法导入SBT 项目 idea sbt 插件没有 工作得很好 我不知道如何获得来源和 来自 SBT 的 javadocs 我想看到有关此问题的任何答案 问
  • 将“C# 友好类型”名称转换为实际类型:“int” => typeof(int)

    我想得到一个System Type给定一个string指定 原始 类型C 友好名称 基本上与 C 编译器读取 C 源代码时的方式相同 我觉得描述我所追求的最好方式是单元测试的形式 我希望存在一种通用技术 可以使以下所有断言通过 而不是尝试对
  • Scala:如何获取数据框中的行范围

    我有一个DataFrame通过运行创建sqlContext readParquet 文件的一个 The DataFrame由 300 M 行组成 我需要使用这些行作为另一个函数的输入 但我想以较小的批次进行操作 以防止 OOM 错误 目前
  • 使方法真正内联

    我伪造了一个简单的例子来检查 inline注释行为 import scala annotation tailrec object InlineTest extends App inline private def corec x Int I
  • 在 sbt 中定义自定义测试配置

    我需要在 sbt 中定义一个运行测试的自定义测试配置 但需要一些额外的设置 我一直在环顾四周 试图弄清楚如何做到这一点 但我似乎无法做到这一点 我想做的是这样的 gt test这将运行正常的测试任务并且 gt pipelinetest这与测
  • 在类型级别未定义

    通常 当我使用 Haskell 代码时 我会使用类型注释将内容存根并undefined foo String gt Int foo undefined 是否有类型级别的 未定义 我可以以类似的方式使用 理想情况下 与某种注释结合使用 typ
  • 浮动到双重误解???克++

    由于某种原因我收到以下警告 filename cpp 99 53 warning narrowing conversion of sin double theta from double to float inside Wnarrowing
  • 凿子“Enum(UInt(), 5)”失败

    当我尝试使用 Chisel 构建 FSM 时 我使用了 Enum 如 Chisel 教程所述 然而 我遇到了这样的错误 my code val sIdle s1 s2 s3 s4 Nil Enum UInt 5 但是 当我执行时sbt ru
  • 如何将枚举绑定到 playframework 表单?

    我有一个以下形式的枚举 object MatchFilterType extends Enumeration type MatchFilterType Value val gt Value gt val lt Value lt val eq
  • 测试期权价值的更好方法?

    我经常发现自己Option T 对于某些类型T并希望根据某个值来测试期权的价值 例如 val opt Some oxbow if opt isDefined opt get lakes do something 以下代码是等效的 并且不需要
  • 验证是否存在唯一字符串的组合

    class Details String name String age String email String location 1 如果有详细信息列表 如下所示List
  • 如何将Spark DataFrame插入Hive内表?

    以追加模式将 DF 插入 Hive 内部表的正确方法是什么 看来我们可以使用 saveAsTable 方法直接将 DF 写入 Hive 或将 DF 存储到临时表然后使用查询 df write mode append saveAsTable
  • 错误:使用替代方法写入重载方法值:

    我正在尝试读取固定宽度的文件并将其写入文本文件 下面是代码 输入文件布局字段的长度 4 10 3 5 3 1 1 5 7 094482018 07 10 022 14012 000 0 30000A 002290 059412018 07
  • James Gosling 对 Java 字节为何有符号的解释

    最初我对 Java 决定指定这一点感到惊讶byte是有符号的 范围是 128 127 包括的 我的印象是大多数 8 位数字表示形式都是无符号的 范围为0 255相反 例如IPv4 点十进制表示法 http en wikipedia org
  • Scala 插入列表中的特定位置

    这是我确实解决的问题 但是作为一个完全命令式的 Scala 菜鸟 我觉得我发现了一些完全不优雅的东西 任何改进的想法表示赞赏 val l1 4 1 2 3 4 Nil original list val insert List 88 99
  • scala 元组拆包

    我知道这个问题已经以不同的方式出现过很多次 但我仍然不清楚 有没有办法达到以下目的 def foo a Int b Int foo a b right way to invoke foo foo getParams is there a w
  • 如何检查字符串是否为类型[重复]

    这个问题在这里已经有答案了 我有类型 export type PermissionType creator editor viewer 在运行时 如何检查变量 userInput 是否实际上是上述类型之一 let userInput foo
  • 使用值类参数的 Mockito 存根方法失败并出现 NullPointerException

    使用类型化值类作为 ID 是 Scala 中的常见模式 然而 在存根以值类作为参数的方法时 Mockito 似乎遇到了问题 在下面的示例中 第一个具有实际值的存根工作得很好 但第二个使用参数匹配器的存根会抛出 NullPointerExce
  • 数据记录的类约束

    我有一个data type data BuildException a KillBuild JobID a Stage FailBuild JobID a Stage CancelBuild JobID a Stage StopBuild

随机推荐

  • 在 Flask 应用程序中运行 Dash 应用程序

    我有一个现有的 Flask 应用程序 并且我想要一条通往另一个应用程序 更具体地说 第二个应用程序是阴谋冲刺应用程序 如何在现有 Flask 应用程序中运行 Dash 应用程序 app route plotly dashboard def
  • 如何在DataGridTextColumn中显示Enum类型?

    我已经列出了列表 并将这些列表绑定到工作正常的数据网格 但在该规则类中 我有一个枚举类型 即 类型 因此在数据网格中 我将类型列设置为空 那么我如何获得枚举输入数据网格列请帮助我 谢谢 nagaraju 通常它应该通过绑定直接转换为它的字符
  • 通过IP地址获取用户位置[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我有一个用 C 编写的 ASP NET 网站 在此站点上 我需要根据用户的位置自动显示起始页 我可以根据用户的IP地址获取用户所在城市的名称吗 您需
  • ASP.NET 表单身份验证

    我有以下 ASP NET 表单身份验证配置
  • 有序地图实现

    我正在寻找一个 Map 实现 它按照添加键值对的顺序迭代键值对 例如 Map orderedMap instantiation omitted for obvious reasons orderMap put 4 d orderMap pu
  • 如何使用 GPML (Matlab) 进行回归的 2D 高斯过程?

    我有一个Nx2输入矩阵称为X 我也有输出值Y这是一个向量Nx1 我创建一些数据进行测试 如下所示 Xtest linspace x min x max n Ytest linspace y min y max n 所以 矩阵Z is of
  • 如何在 Flutter 中制作 AlertDialog?

    我正在学习在 Flutter 中构建应用程序 现在我来到了警报对话框 我以前做过Android and iOS 但是如何在 Flutter 中发出警报呢 以下是一些相关的问题 如何在 Flutter 中设置 AlertDialog 操作的样
  • 在批处理文件中将字符串转换为整数

    我有一个从文件中读取的变量 var 13 145 我想将此值添加到另一个值 set a var var 5 但结果是13 5 not 13145 5 如何从字符串中删除这个 不要添加逗号 set var 13145 另外 在分配变量时 不要
  • 如何正确处理 onclick 事件和 onblur

    以下帖子与我之前提出的问题相关here 尽管这两个问题是独立的 但它们确实与我实现的相同功能相关 预测文本 我遇到的问题与这两个事件的方式有关onblur and onclick叫做 当用户在文本框中输入一些字符并决定单击建议而不是完成输入
  • 在 Android 中禁用后退按钮(不起作用)

    package com my app import java io ByteArrayOutputStream import java io File import java io FileOutputStream import java
  • 在 Mac 上安装的 VSTS 代理中运行 powershell 构建步骤?

    我在 mac 上安装了 VSTS 构建代理来构建 xamarin iOS 项目 构建工作正常 直到我添加了 powershell 构建步骤 即使我安装了 powershell for mac https github com PowerSh
  • 在 SwiftUI 中读取带有子节点的 Firebase 实时数据库父节点时出现问题

    我有以下 Firebase 实时数据库结构 posts user1 uid Kfm0p2EMcrpN8XcLOR5 created at 1490119356 786182 image height 374 9999999999999 im
  • indexedDB 最高键路径

    我在 indexedDB 中有一个使用 Emberjs 适配器填充的数据库 我已经像这样设置了键路径 this addModel App Device keyPath key 当我第一次解析数据时 我的密钥会自动递增 如下所示 data d
  • FullCalendar 限制事件数量并有更多链接

    我发现有人请求向日历添加 更多 链接并限制活动数量 这件事已经完成了吗 或者有人实施了自己的解决方案 可以分享吗 如果是这样 请发布您的代码 随着新版本 v2 1 0 beta2 于 17 天前发布Arshaw做了以下事情 已解决的问题 带
  • java中通过多线程从数据库读取

    我正在使用java中的多线程从vertica数据库读取数据 我有大约 2000 万条记录 我正在打开 5 个不同的线程 其中有这样的选择查询 start threadnum while start 20000 lt totalRecords
  • JSF - 自定义 NavigationHandler 结果值无效?

    我自己编写了一个自定义的 NavigationHandler 与下面的非常相似 但只是使用堆栈来保存历史记录 http jsfatwork irian at book de custom component html idx custom
  • 实体类的正确设计。需要建议

    例如我有实体类User public class User private long id private String name setters and getters 接下来 我添加新的实体类 Comment public class
  • 将 pandas 数据框拆分为许多块

    假设我有一个具有以下结构的数据框 observation d1 1 d2 1 d3 1 d4 1 d5 1 d6 1 d7 1 d8 1 d9 1 d10 1 d11 1 d12 1 d13 1 d14 1 d15 1 d16 1 d17
  • Ukkonen 的后缀树算法(通俗易懂)

    我现在感觉有点厚 我花了几天时间试图完全理解后缀树的构造 但由于我没有数学背景 许多解释都让我无法理解 因为它们开始过度使用数学符号系统 我发现的最接近一个好的解释是使用后缀树快速字符串搜索 但他掩盖了各个要点 并且算法的某些方面仍然不清楚
  • 关于类型细化语法的困惑

    在类型级别上 我偶然发现以下内容 sealed abstract class StSource A type S def init S create the initial state def emit s S A S emit a val
Powered by Hwhale