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

haskell - 模板 Haskell 编译错误

考虑以下代码:

这可以正常编译并按预期打印出“Hello1”。

但是,添加以下行 (GHC 7.4.1) 会产生编译错误:

给出的错误是:

为什么添加该f2行会导致编译错误?

注意:模板 Haskell 部分在这里可能看起来很傻,但它们是更复杂的模板 Haskell 的简化,它确实适用于元组。我已经发布了我可以构建的最简单的示例,但仍然显示错误。我意识到在这种情况下删除 Template Haskell 可以解决问题,但这不是我真实代码中的选项。

编辑:

此外,以下编译失败。为什么会这样:

0 投票
2 回答
573 浏览

scala - HList/KList 是否适合作为方法参数?如何参考?类型列表?

我发现了 HList / KList,它们非常酷。我有一个实际用例,其中具有保守类型信息的异构类型和可变长度容器将非常有用(有关更多信息,请参阅下面的背景)。但是,我还没有理解 H/KList 作为方法参数的用法,我被迫对参数进行完全类型注释或松散类型信息。如果完整类型当然是未知的,H/KLists 甚至可以用作参数吗?如何在不丢失类型信息的情况下引用 H/KList?

“类型列表”可以用来指代异构和可变长度类型参数的元组吗?这里它说: ... the types of the elements can be tracked separate from the actual element values. To do this we create an purely abstract type (it has no instances) which models a list of types, let's call it TList. 我玩过它,但还不明白如何将它用于 HList 的类型注释作为参数。

基本上,我想要这样的东西:

其中 TL 指的是类型列表,X 指的是当前元素的类型。所以这里应该将一个 HList 映射到另一个类似 Tuple 的容器 TypedLink,由类型列表 TL 参数化。每个元素都将被包装在另一个参数化容器 TypedHandle 中,使用当前类型 X 进行类型化。

这可能吗?

我看到了 Shapeless 的 HList 及其“统一”方法,但问题仍然存在:除了可变长度之外,我不知道如何在参数列表中引用它。

我的第二个希望是使用 KList。它适用于我的情况,因为 TypedHandle 是具有相同构造函数的通用容器。根据 apocalisp 的说法,使用 KList 似乎更容易键入注释

将是类型:

但是,问题仍然存在:在方法定义中,我不知道它是否会是

或一个

所以我也不知道如何键入注释 KList 作为方法参数。

感谢您的任何提示!

背景:我正在为优秀的 OO- 和图形数据库 hypergraphdb 编写 scala 便利扩展。Hypergraphdb 的超边 HGLink 基本上是 HGHandle 的元组。HGHandle 指的是本身有类型的原子。因此 HGLink 本身将是异构类型和可变长度的。但是,到目前为止,HGLink 的实现是无类型的,并且是由 HGHandle 的无类型实现构建的。我猜 java 的类型系统的表现力不足以反映 hypergraphdb 的(非常优秀的)类型系统(例如,它也有更高种类的类型)。

基本上,我正在尝试将 scala 与 hypergraphdb 的类型系统连接起来,我学到了很多东西,直到现在这真的很有趣。除了许多其他黑客之外,TypedHandle 已经很好用了。

感谢您的任何建议。

0 投票
1 回答
648 浏览

perl - 如何删除 Tk::HList 中选择的虚线?

当通过单击选择 Tk::HList 中的条目时,将在该条目周围绘制一条虚线。我不想有这条线。我该如何配置它?我没有看到任何记录在案的方法。

下面是一些示例代码,显示了带有预选条目的 Tk::HList。单击该条目时,将出现一条虚线。

0 投票
1 回答
365 浏览

scala - 基于类的类型参数使用 Poly1 在方法中映射 HList

我有类,参数化HList和其他类型。如何在其中一种方法中使用mapon HList

此代码的编译抛出java.lang.AssertionError

我的目标是这样的结果:

0 投票
1 回答
1049 浏览

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

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

知道怎么做吗?

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

0 投票
2 回答
425 浏览

haskell - Haskell:显示 Hlist 上“可显示”的所有元素

我努力了

但它回来了

0 投票
2 回答
275 浏览

haskell - 使用通用函数映射异构数据结构

我正在研究 HList 实现,但我一直在尝试map为它实现一个函数。我尝试了很多不同的方法,但每一种方法我都会遇到与该函数相关的编译器错误。

以下是我想如何使用通用函数Just将其应用于输入数据结构的所有元素的示例。

有了这个,我得到以下编译器错误:

有没有办法解决这个问题,如果没有,那为什么?

0 投票
1 回答
151 浏览

haskell - HList 项目的共享约束

假设我们对 HList 有如下定义:

是否有可能以某种方式对其项目实施共享约束?

例如,以下是我尝试将项目限制为具有Show实例,但失败并显示Couldn't match type `Char' with `Int'

0 投票
1 回答
806 浏览

scala - Shapeless:检查多态函数的类型约束

我正在开发一个小型经济模型库,用于检查实体的单位,使用类型,例如,而不是val apples = 2.0我们编写val apples = GoodsAmount[KG, Apples](2.0). 为了创建捆绑商品,我尝试使用 shapeless 库中的 HLists。这很好用,但在某些情况下,我不能像我喜欢的那样使用通用代码。参见例如以下问题。

我从一个简单的代码开始,它解释了我想要提升为无形的东西。我们创建了两个类,一个代表 Km,另一个代表 Miles。应该允许添加 Km 类,但不允许添加英里。我使用抽象类型 T 的主要动机是我们更复杂的库。而间接调用'+'函数只是因为我们在后面的无形情况下需要类似的东西。

这按预期工作。但是有必要对“添加”功能进行类型约束检查。我将其扩展到 HLists 的尝试如下所示:

但这会生成以下错误消息(使用 Scala 2.10.2):

第一个错误应该被修复,如果我可以向 caseTuple 函数添加类型约束,但老实说,我不明白 at 函数是如何工作的,以及我可以在哪里添加隐式证据参数。而且我也不知道,我必须做什么,这样 Mapper 才能找到他的隐含价值。

一个不太通用的版本,我将 caseTuple 函数替换为

工作正常,但需要编写大量冗余代码(好吧,这个解决方案会比我们当前使用元组的解决方案更好)。有人可以提示我如何解决这个问题吗?

谢谢,克林克

0 投票
1 回答
1539 浏览

scala - 模拟解析器连接的无形 HList 的提取器`~`

问题

是否有可能以某种方式为无形创建一个提取器,HList如下所示。

  1. 替换::~,这应该不是问题。
  2. 摆脱终止HNil。有没有可能出现的问题?

动机

经过大量的汗水和泪水,我终于到达了以下代码的工作点:

expIntInt在某个 monad 中解析一个E。的类型(expInt ~ "+" ~ expInt).llEE[Int :: String :: Int :: HNil]

我希望左边的模式在<-某种程度上类似于右边的组合解析器的构造。