问题标签 [hlist]

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 回答
917 浏览

scala - shapeless HList 到 TupleN 元组形状不需要完全匹配 HList 形状

我想创建相当于:

仅当可以从中创建元组的值的组合toTupleN恰好是一种时,使用的代码才应该编译。其他任何事情都应该产生编译时错误。应考虑可用的隐式转换。请注意,其中的值的大小或顺序没有限制。Nll

例子:

这个问题源于对以下问题的回答。这个问题中更通用的机制可用于创建数据结构并使用.FunctionN#tupled

更新:

使用子类型定义所需行为的一些示例:

0 投票
1 回答
412 浏览

scala - 在无形 HList 中映射元组

你做

将每个子列表映射成一对。但是,如果 HList 元素更复杂,例如元组,该怎么办?自然的尝试

被编译器拒绝。你做什么工作?你在哪里可以学到这个?

0 投票
1 回答
637 浏览

scala - 将 scala List[String]/List[Object] 转换为 model/HList/tuple

外部系统返回 Seq[String](一种 DB,输出类似于 CSV/json),它是基本类型的包装:字符串/数字。我宁愿使用我自己的模型。

显然,我不想每次都实现转换方法。

好像我需要比 http://nrinaudo.github.io/tabulate/tut/parsing.html更简单的东西

可以在这里使用 HList 吗?就像通过仅显式定义输出类型将大小的 HList (String:: String:: String:: HNil) 转换为模型一样。

0 投票
2 回答
198 浏览

haskell - 在 HList 中查找元素

我正在尝试编写两个函数来从 中提取值HList,但我似乎无法让 GHC 高兴。

第一个函数将具有从列表extract :: HList a -> [b]中提取所有类型元素的签名。b我只是通过要求类型a具有Typeable实例来成功编写它。

这是次优的,因为实际上并不需要Typeable约束来编写任何提取实例。

我试图在约束中使用类型等式和不等式,但这只会给我重叠的实例。

我尝试编写的第二个函数将具有extract' :: Contains h n => HList h -> n提取n列表中类型的第一个元素的签名,并且上下文表明列表实际上包含该类型的一个元素。

extract可以不受约束地写作Typeable吗?

extract'可以不受约束地写作Typeable吗?一个人怎么写Contains

0 投票
0 回答
126 浏览

scala - 包含所需类型的 HList 类型参数

我有一个项目严重依赖其算法的确切蓝图,因为它经常变化。它处理事物的列表,并且这些事物与它们相关联的“事实”。我想使用 HList 来跟踪这些事实。这是我拥有的工作设置(scala 2.11,shapeless 2.3.0):

所以这就是问题所在。这样做的理由是我有很多小函数和对象可以执行不同的计算部分,并且由于这个算法的性质(我们用它做了很多实验),我想用最少的代码重新排列这些东西-写作。我想让代码的这些部分只处理他们需要知道的特定事实,而不知道其他任何事情 - 使测试更容易,并为每一位提供一个单一的目的。

问题再次出现:是否可以定义一个称为(最多随机数量的类型参数)的类型,该类型以任何顺序HListWith[T1, T2, ...]定义具有这些类型的 HList ?T*

0 投票
1 回答
125 浏览

scala - 具有无形的基于类型的 ID 生成器

我想实现一个基于类型的 id 生成器,我可以这样调用:

我希望 IdGen 成为一个特征(如果可能的话):

如何使用 Shapeless 实现这一点?

我尝试使用 scala 反射 typeTag 并迭代 toString 结果,但它很难看。

0 投票
2 回答
116 浏览

haskell - Haskell中的无限(最终周期性)HList

假设我有一个无限的动作序列,每个动作都返回某种类型的结果。就像是:

但随着a时间的推移而变化。我想强烈输入这个序列。对于任意无限类型序列和幼稚的方法,这显然没有意义,例如:

将导致无限类型,这是 Haskell 的类型系统不支持的。但是我认为final-periodic HLists 没有任何问题(即,这种类型的序列会从某个点重复自身:)[Bool, Int, Int, Sting, Int, Sting, Int, Sting ... ]。而且我还认为,如果我们有某种强烈的规范化方式来描述无限类型或某种方式来提供可以在有限步数中检查的无限类型相等性的证据,那么应该可以对具有这种无限类型的程序进行类型检查。

有谁知道如何在 Haskell 中表示和使用这些类型?现在让我们从无限最终周期 hlist 开始,但如果有人知道如何将它推广到更广泛的无限 tupes 类以及泛化限制在哪里,我将不胜感激。

0 投票
1 回答
357 浏览

scala - 通用 HList 的映射

假设我们有以下方法

和定制的聚

所以我可以func像这样使用它

在我的代码中,我有少量的波利和大量的func调用。为此,我尝试转移poly: Poly到隐式参数并得到预期的消息

如何更改或扩展poly: Poly参数以避免此错误(我需要保留类型签名func[T <: HList](...))?

0 投票
1 回答
155 浏览

scala - HList 作为具有简化类型签名的方法的参数

假设我有容器标记

wherevalue代表特定类型的一些 id T

我有两节课

我有一个功能可以做一些事情:

所以我可以像使用它一样

(对我来说,明确地保留类型签名很重要)

问题是:如何更改或扩展 func 以具有更短的类型签名(仅保留标记类型),例如:

0 投票
1 回答
92 浏览

scala - 隐式映射器对隐式映射参数的奇怪影响

假设我有容器标记

和偏函数技巧

映射器的多边形

和结果方法

使用示例:

此代码在编译时失败,因为编译器找不到Mapped隐式参数:

但是,如果我们从签名中删除Mapper隐式参数,一切正常。PartFunc.apply(...)所以我不知道为什么以及如何Mapper影响Mapped.