问题标签 [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 回答
76 浏览

scala - 为什么类体会影响隐式解析?

我在尝试抽象类时偶然发现了这个问题。以下代码:

无法编译并显示以下消息:

但是,如果我只是{}new A((1, 'b')) {},它会发现隐式没有问题。

这是一个 Scala 错误还是我错过了什么?

0 投票
1 回答
923 浏览

scala - 无形 API(在 Scala 中)的重要特性是什么,它们有什么作用?

我正在尝试学习无形(2.0.0)。这似乎是一个了不起的工具,我对此感到非常兴奋,但我在前进时遇到了问题。因为还没有太多的文档,所以我一直在研究示例和源代码。我遇到了困难,因为大多数示例都使用了多个无形的概念,并且在源代码中,一种无形的类型经常会利用其他的,所以我最终进入了无形的兔子洞,可以这么说。我认为列出无形 API 的重要特性以及对每个特性的简单描述会很有帮助。因为我显然没有资格列出这样的清单,所以我问你们,Stack Overflow 的人!

对于每个功能,请尽可能多地包括以下内容:

  1. 功能的名称以及如何导入它。

  2. 对其作用的简短描述。

  3. 为什么这个功能很重要/为什么有人会费心使用它?

  4. 一个尽可能少地使用其他无形或高级 Scala 概念的简单示例。

API 的一个特性是指单个事物(例如,类型、函数、对象等),或紧密耦合的此类事物的小集合,由 shapeless 2.0 定义并且可以导入并用于一个程序。我指的不是一般概念,例如高阶多态性或类型级递归。每个答案请仅包含一项功能。也许如果有足够多的答案并且足够多的其他人也使用这个列表,我们可以使用对答案的投票来对不同特征的重要性进行排名。

注意:我知道这个功能列表。我认为它很棒,它对我帮助很大。但是,我正在寻找更类似于 API 文档的东西,而不是你可以做的事情的列表。我可以理解许多示例并从中推断出某些功能的用途,但是我经常会被某些特定的部分绊倒而无法弄清楚它的功能。

0 投票
1 回答
406 浏览

scala - 带有地图的无形示例无法编译(scala)

我正在尝试以无形的方式映射 HList。以下示例源自此处

不幸的是,我无法编译该示例。编译器说“值映射不是 HCons[scala.collection.immutable.Set[Int],HCons[scala.collection.immutable.Set[String],HNil]] 的成员”。我怀疑缺少定义 HLists 上的映射操作的隐式导入,但我不知道该导入应该是什么。我将 sbt 与以下 build.sbt 文件一起使用:

如果我使用 2.0.0 的 M1 版本,我也会遇到这个问题。我应该改变什么来使这个例子编译和运行?

0 投票
1 回答
889 浏览

scala - 无形映射中的亚型多态性

我已经构建了以下内容:

上面的代码效果很好,很棒。不过,我还想要更多。我想,而不是指定我的 HList 将包含列表,允许任何 Iterable。像这样:

第二个版本无法编译,并显示消息“找不到参数映射器的隐式值:shapeless.ops.hlist.Mapper[iterateOverHList.type,shapeless.::[List[Int],shapeless.::[List[String] ],shapeless.HNil]]]"。我在这里期望的子类型多态性,即在 Iterable 上工作的函数应该在 List 上工作,由于某种原因失败了。这是为什么?有没有办法让我解决这个问题,或者我自己的贪婪会成为我的毁灭吗?

0 投票
3 回答
1603 浏览

scala - 无形(scala)中的“at”是什么?

我已经看到一个名为“at”的对象(可能是一个函数)散布在无形的源代码和使用无形的代码中。特别是,它用于回答这个其他问题。这是代码片段:

我有一些线索表明它与 ~> 类型的 apply 方法有关。“at”具体做什么,在哪里定义?

0 投票
2 回答
673 浏览

scala - 将分隔字符串反序列化为案例类的惯用 Scala 方法

假设我正在处理一个简单的以冒号分隔的文本协议,它看起来像:

我想将每一行反序列化为案例类的实例,但以类型安全的方式。我的第一次尝试使用类型类为我可能遇到的每种可能的类型定义“读取”方法,除了案例类上的“元组”方法来取回一个可以应用于参数元组的函数,比如以下:

但问题是我需要为每个元组和函数 arity 定义 create 方法,这意味着最多 22 个版本的 create。此外,这不负责验证或接收损坏的数据。

0 投票
1 回答
394 浏览

scala - 在无形中,有两个列表,其中一个包含另一个的类型类

在无形中,我正在尝试编写一个函数,该函数采用两个 HListsl1l2任意长度,具有以下属性:

  1. l1和的长度l2相同。
  2. l2包含 的确切类型l1,包裹在一个常量外部类型构造函数中。

所以,如果l1

l2可能

使用UnaryTCConstraintandLengthAux让我限制长度并需要一个静态外部构造函数l2,但是让它们符合已经成为一个问题。

关于我如何去做的任何想法?

0 投票
1 回答
54 浏览

scala - 返回使用派生特征的特征

我想创建一个知道如何返回 HList 以及派生 HList 的类型类。理想情况下,它将具有以下结构:

并将像这样实施

问题是 scala 没有具体化类型,因此在编译期间,尽管有足够的信息来确定类型,但导致此错误:

如何以可以正确编译的方式表达我关心的信息?

0 投票
1 回答
320 浏览

scala - 如何使用 Shapeless 编写递归多态函数

我可以写一个简单的递归多态函数:

这似乎在很大程度上做了我想要的;但是,我似乎得到了一个无意义的结果类型:

我怎样才能让这给我的价值Option[Option[Int]]而不是Option[B]?我希望我在这里犯了一些愚蠢的错误,但无法弄清楚它是什么。

0 投票
2 回答
4291 浏览

scala - Shapeless 中 Nat 类型的限制

在 shapeless 中,Nat 类型代表了一种在类型级别对自然数进行编码的方法。例如,这用于固定大小的列表。您甚至可以在类型级别上进行计算,例如将N元素列表附加到元素列表K并返回在编译时已知具有N+K元素的列表。

这种表示是否能够表示大数,例如10000002 53,还是会导致 Scala 编译器放弃?