问题标签 [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 - 为什么类体会影响隐式解析?
我在尝试抽象类时偶然发现了这个问题。以下代码:
无法编译并显示以下消息:
但是,如果我只是{}
从new A((1, 'b')) {}
,它会发现隐式没有问题。
这是一个 Scala 错误还是我错过了什么?
scala - 无形 API(在 Scala 中)的重要特性是什么,它们有什么作用?
我正在尝试学习无形(2.0.0)。这似乎是一个了不起的工具,我对此感到非常兴奋,但我在前进时遇到了问题。因为还没有太多的文档,所以我一直在研究示例和源代码。我遇到了困难,因为大多数示例都使用了多个无形的概念,并且在源代码中,一种无形的类型经常会利用其他的,所以我最终进入了无形的兔子洞,可以这么说。我认为列出无形 API 的重要特性以及对每个特性的简单描述会很有帮助。因为我显然没有资格列出这样的清单,所以我问你们,Stack Overflow 的人!
对于每个功能,请尽可能多地包括以下内容:
功能的名称以及如何导入它。
对其作用的简短描述。
为什么这个功能很重要/为什么有人会费心使用它?
一个尽可能少地使用其他无形或高级 Scala 概念的简单示例。
API 的一个特性是指单个事物(例如,类型、函数、对象等),或紧密耦合的此类事物的小集合,由 shapeless 2.0 定义并且可以导入并用于一个程序。我指的不是一般概念,例如高阶多态性或类型级递归。每个答案请仅包含一项功能。也许如果有足够多的答案并且足够多的其他人也使用这个列表,我们可以使用对答案的投票来对不同特征的重要性进行排名。
注意:我知道这个功能列表。我认为它很棒,它对我帮助很大。但是,我正在寻找更类似于 API 文档的东西,而不是你可以做的事情的列表。我可以理解许多示例并从中推断出某些功能的用途,但是我经常会被某些特定的部分绊倒而无法弄清楚它的功能。
scala - 带有地图的无形示例无法编译(scala)
我正在尝试以无形的方式映射 HList。以下示例源自此处:
不幸的是,我无法编译该示例。编译器说“值映射不是 HCons[scala.collection.immutable.Set[Int],HCons[scala.collection.immutable.Set[String],HNil]] 的成员”。我怀疑缺少定义 HLists 上的映射操作的隐式导入,但我不知道该导入应该是什么。我将 sbt 与以下 build.sbt 文件一起使用:
如果我使用 2.0.0 的 M1 版本,我也会遇到这个问题。我应该改变什么来使这个例子编译和运行?
scala - 无形映射中的亚型多态性
我已经构建了以下内容:
上面的代码效果很好,很棒。不过,我还想要更多。我想,而不是指定我的 HList 将包含列表,允许任何 Iterable。像这样:
第二个版本无法编译,并显示消息“找不到参数映射器的隐式值:shapeless.ops.hlist.Mapper[iterateOverHList.type,shapeless.::[List[Int],shapeless.::[List[String] ],shapeless.HNil]]]"。我在这里期望的子类型多态性,即在 Iterable 上工作的函数应该在 List 上工作,由于某种原因失败了。这是为什么?有没有办法让我解决这个问题,或者我自己的贪婪会成为我的毁灭吗?
scala - 无形(scala)中的“at”是什么?
我已经看到一个名为“at”的对象(可能是一个函数)散布在无形的源代码和使用无形的代码中。特别是,它用于回答这个其他问题。这是代码片段:
我有一些线索表明它与 ~> 类型的 apply 方法有关。“at”具体做什么,在哪里定义?
scala - 将分隔字符串反序列化为案例类的惯用 Scala 方法
假设我正在处理一个简单的以冒号分隔的文本协议,它看起来像:
我想将每一行反序列化为案例类的实例,但以类型安全的方式。我的第一次尝试使用类型类为我可能遇到的每种可能的类型定义“读取”方法,除了案例类上的“元组”方法来取回一个可以应用于参数元组的函数,比如以下:
但问题是我需要为每个元组和函数 arity 定义 create 方法,这意味着最多 22 个版本的 create。此外,这不负责验证或接收损坏的数据。
scala - 在无形中,有两个列表,其中一个包含另一个的类型类
在无形中,我正在尝试编写一个函数,该函数采用两个 HListsl1
和l2
任意长度,具有以下属性:
l1
和的长度l2
相同。l2
包含 的确切类型l1
,包裹在一个常量外部类型构造函数中。
所以,如果l1
是
l2
可能
使用UnaryTCConstraint
andLengthAux
让我限制长度并需要一个静态外部构造函数l2
,但是让它们符合已经成为一个问题。
关于我如何去做的任何想法?
scala - 返回使用派生特征的特征
我想创建一个知道如何返回 HList 以及派生 HList 的类型类。理想情况下,它将具有以下结构:
并将像这样实施
问题是 scala 没有具体化类型,因此在编译期间,尽管有足够的信息来确定类型,但导致此错误:
如何以可以正确编译的方式表达我关心的信息?
scala - 如何使用 Shapeless 编写递归多态函数
我可以写一个简单的递归多态函数:
这似乎在很大程度上做了我想要的;但是,我似乎得到了一个无意义的结果类型:
我怎样才能让这给我的价值Option[Option[Int]]
而不是Option[B]
?我希望我在这里犯了一些愚蠢的错误,但无法弄清楚它是什么。
scala - Shapeless 中 Nat 类型的限制
在 shapeless 中,Nat 类型代表了一种在类型级别对自然数进行编码的方法。例如,这用于固定大小的列表。您甚至可以在类型级别上进行计算,例如将N
元素列表附加到元素列表K
并返回在编译时已知具有N+K
元素的列表。
这种表示是否能够表示大数,例如1000000
2 53,还是会导致 Scala 编译器放弃?