问题标签 [shapeless]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
scala - 从两个 HList 中创建所有对的 HList
我在 Scala 中使用 shapeless,我想编写一个函数 allPairs,它将采用两个 HList 并返回所有元素对的 HList。例如:
知道怎么做吗?
另外,我想强调一下,我正在寻找一个函数,而不是内联的代码块。
scala - 测试某个东西不能编译的断言
问题
当我使用支持类型级编程的库时,我经常会发现自己在写如下注释(来自Paul Snively 在 Strange Loop 2012 中提出的示例):
这是一种非常粗略的方式来表明关于这些方法的行为的一些事实,我们可以想象想要使这些断言更正式——用于单元或回归测试等。
为了给出一个具体的例子来说明为什么这可能在像 Shapeless 这样的库的上下文中很有用,几天前我写了以下内容作为对这个问题的快速第一次尝试:
目的是编译:
虽然这不会:
我惊讶地发现这种类型级unique
for 的实现HList
不起作用,因为 Shapeless 很乐意FilterAux
在后一种情况下找到一个实例。换句话说,即使您可能不希望它编译,以下内容也会编译:
在这种情况下,我看到的是一个错误——或者至少是一些类似错误的东西——并且它已经被修复了。
更一般地说,我们可以想象想要检查隐含在我的期望中的那种不变量,它FilterAux
应该如何处理单元测试之类的东西——就像谈论测试这样的类型级代码听起来很奇怪,所有最近关于类型与测试的相对优点的辩论。
我的问题
问题是我不知道任何类型的测试框架(适用于任何平台)允许程序员断言某些东西不能编译。
我可以想象的一种方法是FilterAux
使用旧的implicit-argument-with-null-default技巧:
这将让您在单元测试中编写以下内容:
不过,以下内容会更加方便和富有表现力:
我要这个。我的问题是,是否有人知道任何支持远程类似东西的测试库或框架——对于 Scala 来说是理想的,但我会满足于任何东西。
scala - 如何在 Scala 中将元素附加或添加到元组
我有一个元组,想在不丢失类型安全的情况下添加一个元素。这就是我想要实现的目标:
scala - Sequencing an HList
Given a Shapeless HList where every list element shares the same type constructor, how can the HList be sequenced?
For example:
I tried to implement sequence like this:
But that does not compile:
Any tips on implementing this for either a specific example like Option or for an arbitrary Applicative?
scala - FP 或类型级工具在嵌套数据的深叶上分组?
我得到了一个深度嵌套的数据结构:
在 Try.isFailure 上进行分组是否有一种很好的功能方式?
使用 Shapeless,可以在任意嵌套数据结构中进行搜索,如此处所示。但发现只是我问题的一部分。我看到了拉链和镜片,它们很好,但它们不是这里的正确工具。
对于信息,数据代表一些测试代码的结果。这些层是:配置排列 => 测试组件 => 数据突变 => 测试代码。字符串是描述,long 是完成每个组件测试所花费的时间。我想创建两个列表,一个包含所有失败的所有信息,保留它们发生的时间和地点的所有信息,将异常保存为信息,一个对应的一个用于成功。
已经有解决方案了吗?
注意:对于该特定情况,最明智的方法是重新设计我的测试代码,以便从一开始就创建两个列表,一个失败列表和一个成功列表。但是,我还是想知道。这种问题似乎并不少见。
scala - 如何表示 Scala 中案例类的部分更新?
我有以下案例类:
我想将它的部分修改表示为数据。
一种方法是创建案例类:
然后是一些方法:
但它有点样板!
我认为acase class PropositionContent[M[_]](title:M[String],content:M[String])
不会真正解决问题,我不知道如何使用Shapeless解决问题。
那么你有什么想法吗?
scala - HList 上的映射因 Scala 和 Shapeless 中的泛型类型的子类型而失败
假设我们有以下类和一些值(在 Scala 中):
此外,我们定义了以下多态函数值(使用 shapeless):
现在我们可以调用:
这一切都成功了(恕我直言)。然而:
我期待的地方:
请注意,这有效:
更新
看来,如果我们分别指定每种情况,就可以了:
但是,尝试更聪明地表达这一点是行不通的(即使对于简单的应用程序也不行):
scala - 当生成的存在类型太复杂时,无形 HList 上的 toList 失败
给定以下定义:
这有效:
虽然这不会:
我期望的地方:
伪解决方案:
提供隐含的自己:
这当然不是一个解决方案,因为它消除了HLists
(HList
由调用者提供以及所有必要的隐含)的全部好处。
澄清
List[R[_]]
如果最后得到没有类型限制的a,我会很高兴。
scala - 提供附加参数以映射到 HList
我想做这样的事情:
在我的用例中,主题实际上是Subject[T]
,我需要结果中的类型安全版本T
。所以我有:
但是,现在我无法传递testFun
根据这篇文章需要具有单例类型的配置。
一种选择是:
但HList
目前没有fill
手术。有什么提示吗?
api - 无形 Aux 类背后的模式
在研究 shapeless 和 spray 库时,我看到了许多内部 Aux 类型、特征、对象和类。不难理解,它用于扩充现有的内部 API,它看起来很像工厂和辅助方法的“伴侣对象模式”。来自HList来源的示例: