问题标签 [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.

0 投票
1 回答
1049 浏览

scala - 从两个 HList 中创建所有对的 HList

我在 Scala 中使用 shapeless,我想编写一个函数 allPairs,它将采用两个 HList 并返回所有元素对的 HList。例如:

知道怎么做吗?

另外,我想强调一下,我正在寻找一个函数,而不是内联的代码块。

0 投票
5 回答
3546 浏览

scala - 测试某个东西不能编译的断言

问题

当我使用支持类型级编程的库时,我经常会发现自己在写如下注释(来自Paul Snively 在 Strange Loop 2012 中提出的示例):

或者,来自Shapeless存储库中的示例

这是一种非常粗略的方式来表明关于这些方法的行为的一些事实,我们可以想象想要使这些断言更正式——用于单元或回归测试等。

为了给出一个具体的例子来说明为什么这可能在像 Shapeless 这样的库的上下文中很有用,几天前我写了以下内容作为对这个问题的快速第一次尝试:

目的是编译:

虽然这不会:

我惊讶地发现这种类型级uniquefor 的实现HList不起作用,因为 Shapeless 很乐意FilterAux在后一种情况下找到一个实例。换句话说,即使您可能不希望它编译,以下内容也会编译:

在这种情况下,我看到的是一个错误——或者至少是一些类似错误的东西——并且它已经被修复了

更一般地说,我们可以想象想要检查隐含在我的期望中的那种不变量,它FilterAux 应该如何处理单元测试之类的东西——就像谈论测试这样的类型级代码听起来很奇怪,所有最近关于类型测试的相对优点的辩论。

我的问题

问题是我不知道任何类型的测试框架(适用于任何平台)允许程序员断言某些东西不能编译

我可以想象的一种方法是FilterAux使用旧的implicit-argument-with-null-default技巧

这将让您在单元测试中编写以下内容:

不过,以下内容会更加方便和富有表现力:

我要这个。我的问题是,是否有人知道任何支持远程类似东西的测试库或框架——对于 Scala 来说是理想的,但我会满足于任何东西。

0 投票
4 回答
18133 浏览

scala - 如何在 Scala 中将元素附加或添加到元组

我有一个元组,想在不丢失类型安全的情况下添加一个元素。这就是我想要实现的目标:

0 投票
2 回答
1697 浏览

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?

0 投票
1 回答
159 浏览

scala - FP 或类型级工具在嵌套数据的深叶上分组?

我得到了一个深度嵌套的数据结构:

在 Try.isFailure 上进行分组是否有一种很好的功能方式?

使用 Shapeless,可以在任意嵌套数据结构中进行搜索,如此处所示。但发现只是我问题的一部分。我看到了拉链和镜片,它们很好,但它们不是这里的正确工具。

对于信息,数据代表一些测试代码的结果。这些层是:配置排列 => 测试组件 => 数据突变 => 测试代码。字符串是描述,long 是完成每个组件测试所花费的时间。我想创建两个列表,一个包含所有失败的所有信息,保留它们发生的时间和地点的所有信息,将异常保存为信息,一个对应的一个用于成功。

已经有解决方案了吗?

注意:对于该特定情况,最明智的方法是重新设计我的测试代码,以便从一开始就创建两个列表,一个失败列表和一个成功列表。但是,我还是想知道。这种问题似乎并不少见。

0 投票
2 回答
845 浏览

scala - 如何表示 Scala 中案例类的部分更新?

我有以下案例类:

我想将它的部分修改表示为数据。

一种方法是创建案例类:

然后是一些方法:

但它有点样板!

我认为acase class PropositionContent[M[_]](title:M[String],content:M[String])不会真正解决问题,我不知道如何使用Shapeless解决问题。

那么你有什么想法吗?

0 投票
1 回答
1157 浏览

scala - HList 上的映射因 Scala 和 Shapeless 中的泛型类型的子类型而失败

假设我们有以下类和一些值(在 Scala 中):

此外,我们定义了以下多态函数值(使用 shapeless):

现在我们可以调用:

这一切都成功了(恕我直言)。然而:

我期待的地方:

请注意,这有效:

更新

看来,如果我们分别指定每种情况,就可以了:

但是,尝试更聪明地表达这一点是行不通的(即使对于简单的应用程序也不行):

0 投票
2 回答
563 浏览

scala - 当生成的存在类型太复杂时,无形 HList 上的 toList 失败

给定以下定义:

这有效:

虽然这不会:

我期望的地方:

伪解决方案:

提供隐含的自己:

这当然不是一个解决方案,因为它消除了HListsHList由调用者提供以及所有必要的隐含)的全部好处。

澄清

List[R[_]]如果最后得到没有类型限制的a,我会很高兴。

0 投票
1 回答
236 浏览

scala - 提供附加参数以映射到 HList

我想做这样的事情:

在我的用例中,主题实际上是Subject[T],我需要结果中的类型安全版本T。所以我有:

但是,现在我无法传递testFun根据这篇文章需要具有单例类型的配置。

一种选择是:

HList目前没有fill手术。有什么提示吗?

0 投票
1 回答
572 浏览

api - 无形 Aux 类背后的模式

在研究 shapeless 和 spray 库时,我看到了许多内部 Aux 类型、特征、对象和类。不难理解,它用于扩充现有的内部 API,它看起来很像工厂和辅助方法的“伴侣对象模式”。来自HList来源的示例: