理解无形状的“单态”示例

2024-06-21

The 无形特征概述 https://github.com/milessabin/shapeless/wiki/Feature-overview%3a-shapeless-2.0.0显示以下示例:

import poly._

// choose is a function from Sets to Options with no type specific cases
object choose extends (Set ~> Option) {
  def apply[T](s : Set[T]) = s.headOption
}

scala> choose(Set(1, 2, 3))
res0: Option[Int] = Some(1)

scala> choose(Set('a', 'b', 'c'))
res1: Option[Char] = Some(a)

但是,由于缺乏 Shapeless 的经验,我不明白它与以下内容之间的区别:

scala> def f[T](set: Set[T]): Option[T] = set.headOption
f: [T](set: Set[T])Option[T]

scala> f( Set(1,2,3) )
res0: Option[Int] = Some(1)

scala> f( Set('a', 'b', 'c') )
res1: Option[Char] = Some(a)

这里重要的区别是choose是一个可以作为值传递的函数。您无法从中得出(合理的)值f,因为 Scala 不支持多态函数值:

scala> val fun = f _
fun: Set[Nothing] => Option[Nothing] = <function1>

如您所见,Scala 将元素类型修复为Nothing使该函数对于非空集无用:

scala> fun(Set(1))
<console>:10: error: type mismatch;
 found   : Int(1)
 required: Nothing
              fun(Set(1))
                      ^

这正如您对 Shapeless 方法所期望的那样。

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

理解无形状的“单态”示例 的相关文章

  • java.lang.OutOfMemoryError:Scala 上超出了 GC 开销限制

    我是 Scala 开发人员 我在Routes它包含的文件1008行如果我添加另一行 则会抛出下面的错误 Uncaught error from thread sbt web scheduler 1 shutting down JVM sin
  • Scala:如何转义文字中的反引号?

    Scala 中的文字允许将标识符定义为这样answer https stackoverflow com a 6576663 5826349描述 有没有办法在文字中转义反引号 做类似的事情 val hello world hello worl
  • 在 Play 上强制实施 SSL!框架

    我目前正在使用 Play 1 2 2 及其新的 Netty 客户端框架 尽管可以让 HTTP 和 HTTPS 异步服务 但我还没有找到一种简单的方法来强制执行 SSL 有没有人使用过 Play 有强制实施 SSL 的简单方法吗 不确定我是否
  • Scala API 2.10.*:Function2.and然后发生了什么?

    我正在阅读 Joshua Suereth 所著的 Scala in Depth 我购买这本书是为了了解作者的明确能力 我在第 3 页上 在出现一堆拼写错误和不连贯的格式之后 好吧 我已经开始容忍这些错误 我偶然发现了以下示例 该示例涉及解决
  • scala 生成的字节代码如何删除已检查的异常?

    是否可以为应该抛出检查异常的方法编写字节代码 例如 除非该方法声明它抛出已检查的异常 否则以下 Java 类不会编译 public class CheckedExceptionJava public Class
  • 使方法真正内联

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

    我需要在 sbt 中定义一个运行测试的自定义测试配置 但需要一些额外的设置 我一直在环顾四周 试图弄清楚如何做到这一点 但我似乎无法做到这一点 我想做的是这样的 gt test这将运行正常的测试任务并且 gt pipelinetest这与测
  • 当我在 scala 中使用全局映射变量而不广播时会发生什么

    在 scala 中 当我在 scala 中使用全局映射变量而不进行广播时会发生什么 例如 如果我使用变量collect 例如collectAsMap 看来它是一个全局变量 我可以在所有地方使用它RDD mapValues 函数无需显式广播它
  • scala的可变和不可变设置何时使用val和var

    我正在阅读 Scala Creator 编写的 Scala 编程 一书 我对 Set 的示例有点困惑 这是不可变集 var jetSet Set Boeing Airbus jetSet Lear println jetSet contai
  • Scala 将字符串转换为映射

    转换这个最快的方法是什么 a ab b cd c cd d de e ef f fg 进入 scala 中的可变映射 我从 500MB 文件中读取了这个输入字符串 这就是我关心速度的原因 如果您的 JSON 像您的示例一样简单 即一系列键
  • 为什么 Vector[Option[Int]] 上的 flatMap 其映射器函数结果不是 Vector[Option[Int]] 有效?

    例如 Vector Some 1 Some 2 Some 3 None flatMap n gt n 产生一个Vector 1 2 3 而不是给出错误 正如我在其他语言中看到的那样 flatMap当你有一个产生嵌套的映射器函数时使用 所以我
  • 生成 k 个成对独立的哈希函数

    我正在尝试实施一个计数最小草图 http en wikipedia org wiki Count Min sketchScala中的算法 所以我需要生成k个成对独立的哈希函数 这是一个比我以前编写过的任何东西都低的级别 除了算法类之外 我对
  • 如何在 Lift 中反序列化 DateTime

    我在将 org joda time DateTime 字段从 JSON 反序列化到案例类时遇到问题 JSON val ajson parse creationDate 2013 01 02T10 48 41 000 05 00 我还设置了这
  • Scala 插入列表中的特定位置

    这是我确实解决的问题 但是作为一个完全命令式的 Scala 菜鸟 我觉得我发现了一些完全不优雅的东西 任何改进的想法表示赞赏 val l1 4 1 2 3 4 Nil original list val insert List 88 99
  • 通过Listener获取Spark thrift服务器查询中读取的行数

    我正在尝试为我们的 ST 服务器构建一个监控系统 到目前为止 诸如记录查询 检索的行 红色和花费的时间之类的事情都很好 我已经实现了一个自定义侦听器 我能够毫无问题地检索查询和时间 侦听SparkListenerSQLExecutionSt
  • Scala 中的 Case 对象与枚举

    是否有关于何时使用的最佳实践指南案例类 http en wikipedia org wiki Scala 28programming language 29 Case classes and pattern matching 或 case
  • Scala Spark:将数据框中的双列转换为日期时间列

    我正在尝试编写代码来将日期时间列 date 和 last updated date 转换为 mm dd yyyy 格式以进行显示 它们实际上是 unix 时间转换为双精度数 我该怎么做呢 import org joda time impor
  • 从单个字符串创建 Spark DataFrame

    我正在尝试采用硬编码字符串并将其转换为 1 行 Spark DataFrame 具有单列类型StringType 这样 String fizz buzz 将得到一个 DataFrame 其 show 方法如下 fizz buzz 迄今为止我
  • 首次使用 SBT - 检索代理背后的依赖项时出现问题

    我已经下载了 SBT sbt 0 13 15 zip 并将其解压缩 但在运行 sbt bat 时遇到问题 最初 我遇到了代理问题 当我发现需要指定时修复了这些问题onlyhttpsconfig 而不是 http 的 当提供两者时 它使用的是
  • java.lang.RuntimeException:不支持的文字类型类org.joda.time.DateTime

    我在一个使用库的项目中工作 这对我来说非常新 尽管我在其他项目中使用它 没有任何问题 org joda time DateTime 所以我和Scala 并将项目作为作业运行数据块 scala版本 2 11 12 根据我到目前为止的调查 异常

随机推荐

  • 当悬停时不透明度发生变化时,Google Chrome 中的背景会发生变化

    我使用 Jquery 设置了悬停效果 可以更改悬停元素的不透明度 它在所有最新的浏览器中都能正常工作 除了 Chrome 它会改变 body 元素的背景 这是链接 http wrong ro tataia http wrong ro tat
  • 有没有一种简单的方法(工具?)来比较不同格式的图像像素?

    好吧 我现在已经用 java 编写了一个基本的无损 jpeg 连接器 但我想将它生成的文件与原始文件进行比较 我只能在十六进制编辑器中比较这么多 有谁知道一种简单的方法 基于软件或基于java 最好是软件 因为我现在不想再编码了 我可以比较
  • 弯曲方向等高行:列

    我有一个带有两个弹性项目的弹性布局 显示为行 flex direction column 这些物品应该有一个最小高度 但它们应该保持其中一个物品生长所需的相同高度 看这个 JSFiddle https jsfiddle net 958vxh
  • Eclipse 的 Bash 脚本插件? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有正经的bashEclipse 的插件 我唯一的要求是语法突出显示 我用谷歌搜索过 但没有看到任何
  • Angular2 - 使用路由器出口名称时路由不起作用

    我试图为路由器插座命名 但它不起作用 这是完美运行的基本路由 路由模块 NgModule imports RouterModule forChild path admin component AdminComponent children
  • 除非我在 HTML 中使用 标签加载图像,否则背景图像不会显示在 CSS 中

    我非常困惑为什么我的代码无法正确显示图像 这是我的代码 div p p div 只有图像的一小部分与文本一起显示 我很困惑为什么会发生这种情况 显示整个图像的唯一方法是在图像周围添加近 170 像素的填充 请有人帮忙 Thanks 你之前需
  • 如何使用 Objective-C 解析 JSON?

    我是 iPhone 新手 谁能告诉我解析此数据并获取活动详细信息 名字和姓氏的步骤 error false data activity id 35336 user id 1 user first name Chandra Bhusan us
  • jQuery FullCalendar 不渲染

    我的网站上有一个可用的完整日历 但是 直到您更改月份 年份或选择 今天 后 实际的日历表才会显示 如果我查看渲染的源代码 我会发现桌子周围的 div 是空的 直到我按下按钮 div class fc view fc view month f
  • 如何在一个页面中使用vuetify.css和bootstrap?

    我想同时使用vuetify min css文件夹和bootstratp min css文件夹 Bootstrap 是在布局页面上定义的 我需要在另一个页面上使用 vuetify min css 有什么办法可以同时使用它们吗 这里有多种解决方
  • 数据框中的列除法(或任何其他数学运算符)之前的类型转换

    我有一个包含列的数据框A B 我需要添加一列C这基本上是条目的划分A通过中的条目B 我试过这个 df C df A df B 但在执行此操作之前 我需要转换为双精度或浮点数 我应该如何类型转换dtype列的 Thanks 怎么样 df C
  • .NET 3.5 和 .NET 4.5 之间的多重绑定发生了什么?

    我们目前正在将项目从 NET 版本 3 5 转换为版本 4 5 我们使用多重绑定转换器设置了一个文本框 IsEnabled 标记 每个绑定都有自己的转换器 所有这些在 NET 3 5 中都运行良好 但在 NET 4 5 中 传递给子转换器的
  • 将钩子传递给子打字稿的问题

    我有一个使用钩子的反应组件 我的父组件如下所示 const Parent gt const isActive setIsActive useState false return
  • Openstack Octavia 错误:警告 Octavia.amphorae.drivers.haproxy.rest_api_driver [-] 无法连接到实例

    我是研究和实施 Openstack Victoria 的最后一名学生 当我在多节点 CentOS8 上配置项目 Octavia Loadbalancer 时 我遇到了问题 似乎 Octavia amphorae drivers haprox
  • 相当于Android中的javax.swing.Timer

    有没有类似的东西javax swing Timer在安卓上 我知道如何创建自己的线程 但是有类似摆动计时器的东西吗 您可能正在寻找课程android os CountDownTimer http developer android com
  • 如何访问 TabControl 选项卡内的控件?

    这就是我到目前为止所拥有的一切 tabControl1 TabPages 0 我的 TabControl 的 TabPage1 中有一个 PictureBox 如何使用代码而不是属性窗格更改图像位置 尽管控件出现在容器内 作为 TabCon
  • JS中如何将笛卡尔坐标转换为极坐标?

    我需要使用笛卡尔坐标中的 X 和 Y 来了解极坐标中的旋转角度 How to do it in JS without a lot of IF statements I know that I can do it using 但我认为这对性能
  • 打字!带有 pyautogui 的字符

    这可以模拟击键 import pyautogui pyautogui typewrite hello world interval 0 1 除了那个 它写道hello world 使用 FR 键盘布局 它写道hello world 使用 E
  • 为网络和/或持久存储序列化 Android Bundle?

    我需要序列化一个全面的应用程序 游戏 状态 以便通过网络传输或保存到磁盘并在以后检索 当然 捆绑包用于在多个用例中保存 恢复状态 因此使用它们将是理想的选择 但是 由于某种原因 Bundle 不可序列化 寻找解决方案只发现了将 Bundle
  • 从 QFile 获取句柄

    我有一个QFile 但我需要在其上调用一些仅接受HANDLE 有没有办法找回底层HANDLE of the QFile 我找到了一种使用的方法 get osfhandle 在 MinGW 和 VS 中可用 QFile file HANDLE
  • 理解无形状的“单态”示例

    The 无形特征概述 https github com milessabin shapeless wiki Feature overview 3a shapeless 2 0 0显示以下示例 import poly choose is a