问题标签 [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 - 在 Scala 元组上使用功能组合器?
'map' 保留了元素的数量,因此在元组上使用它似乎是明智的。
到目前为止我的尝试:
它看起来很痛苦......而且我什至还没有开始尝试将它转换回元组。
我做错了吗?图书馆可以改进吗?
scala - 可以在 Scala HList 上执行 Map
我现在已经做了一些 HList 的实现。一个基于 Daniel Spiewak 在 Scala 之地的高级巫术演讲,另一个基于 Apocalisp 博客中的一篇文章。目标是有一个异质列表,其中在主要类型中不是异质的,而是更高类型的。例如:
我将能够在列表中进行映射以执行请求并生成更高类型的异构列表。所以:
应该等于
可悲的是,我所有的尝试都导致了 Any 的 HList。这是最近尝试的代码:
另一种尝试是基于 Apocalisp 版本,它使用 fold 创建一个新的 HList,它再次产生了一个 Any 类型的 HList。任何提示将不胜感激。
scala - 无形:前置。未找到隐式
我正在尝试使用 shapeless 以类型安全的方式轻松地积累对象。
问题是当我想连接(:::
)两个时HList
。我遇到了一个新手(至少看起来)问题。它错过了Prepend
上下文中的隐式实例。
但是,查看hlist.scala
,我可以看到泛型implicit def
在对象Prepend
和PrependAux
.
添加import Prepend
和import PrependAux
手动并没有改变任何东西(显然......)。
所以这里的代码减少到最低限度:
现在在控制台中:
什么应该灼伤我的眼睛?
谢谢
编辑
稍微更新一下,把真正的问题重新复杂化了一点,因为之前要粗俗化是要强烈的。
这是我能做的事情:
所以我无法访问真正的类型,只有我知道它们是HList。
scala - 为什么我不能索引到通过映射另一个 HList 获得的 HList?
甚至.head
不起作用。
我需要做哪些改变才能完成这项工作?
scala - 用函数替换异步匿名类
我认为这可能与无形库有关。
我正在使用无形将匿名类转换为闭包。这需要使用hlisted
fromFnHListerAux
特征。
我想要做的就是摆脱传入的虚拟函数,并在这个函数周围返回一个闭包,它具有与F
. 如果没有异步执行的匿名类,这将很容易。有没有办法解决这个问题?
scala - HLists 只不过是一种复杂的元组编写方式吗?
我真的很想找出差异在哪里,更一般地说,是找出不能使用 HLists 的规范用例(或者更确切地说,不会比常规列表产生任何好处)。
(我知道TupleN
Scala 中有 22 个(我相信),而一个只需要一个 HList,但这不是我感兴趣的那种概念差异。)
我在下面的文字中标记了几个问题。实际上可能没有必要回答它们,它们更多是为了指出我不清楚的事情,并引导讨论朝着某些方向发展。
动机
我最近在 SO 上看到了几个答案,人们建议使用 HLists(例如,由Shapeless提供),包括对此问题的已删除答案。它引发了这种讨论,进而引发了这个问题。
介绍
在我看来,只有当您静态地知道元素的数量及其精确类型时,hlist 才有用。这个数字实际上并不重要,但您似乎不太可能需要生成一个包含不同但静态精确已知类型的元素的列表,但您并不静态知道它们的数字。问题 1:你甚至可以写一个这样的例子吗,例如,在一个循环中?我的直觉是,拥有一个静态精确的 hlist 和一个静态未知数量的任意元素(相对于给定的类层次结构是任意的)是不兼容的。
HLists 与元组
如果这是真的,即您静态地知道数字和类型 -问题 2:为什么不只使用 n 元组?当然,您可以对HList 进行类型安全地映射和折叠(您也可以,但不是类型安全地,借助productIterator
直接执行操作。
另一方面,如果f
您在 hlist 上映射的函数是如此通用以至于它接受所有元素 -问题 3:为什么不使用它 via productIterator.map
?好的,一个有趣的区别可能来自方法重载:如果我们有几个重载f
的 's,具有由 hlist 提供的更强类型信息(与 productIterator 相比)可以允许编译器选择更具体的f
. 但是,我不确定这是否真的适用于 Scala,因为方法和函数并不相同。
HLists 和用户输入
基于相同的假设,即您需要静态知道元素的数量和类型 -问题 4:可以在元素依赖于任何类型的用户交互的情况下使用 hlists 吗?例如,想象用循环内的元素填充 hlist;从某处(UI、配置文件、actor 交互、网络)读取元素,直到满足特定条件。hlist 的类型是什么?与接口规范 getElements: HList[...] 类似,它应该与静态未知长度的列表一起使用,并且允许系统中的组件 A 从组件 B 获取这样的任意元素列表。
scala - 在 Shapeless 中返回大小为 n 的列表的方法
是否可以使以下代码工作?
我收到一个编译错误,提示“找不到参数 toIntN 的隐式值:shapeless.ToInt[N]”。
scala - 根据 scala 中参数的类型选择函数列表的子集
这是有问题的代码。下面包括一些描述/解释
基本上我的目标是拥有一个函数列表,保留它们的类型(输入和输出),并能够根据它们作为输入和作为输出的内容来搜索特定函数。我开始相信,如果没有某种猴子补丁,这在 scala 中是不可能的,我想避免这种情况。
scala - 具有额外约束的 Scala 无形 KList
我想采用这种模式:
但让它接受 a KList
,而不是手动覆盖所有的arities。基本上我想说,“取任意数量的RList
具有相同S
成员类型的 s”
RList
是一个特征,它包含一个 type S
。(有关 RList 的更多背景信息以及我这样做的原因,请参阅:Constrain function based on origin (Path Dependent type?Type Generation?))