问题标签 [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.
haskell - 模板 Haskell 编译错误
考虑以下代码:
这可以正常编译并按预期打印出“Hello1”。
但是,添加以下行 (GHC 7.4.1) 会产生编译错误:
给出的错误是:
为什么添加该f2
行会导致编译错误?
注意:模板 Haskell 部分在这里可能看起来很傻,但它们是更复杂的模板 Haskell 的简化,它确实适用于元组。我已经发布了我可以构建的最简单的示例,但仍然显示错误。我意识到在这种情况下删除 Template Haskell 可以解决问题,但这不是我真实代码中的选项。
编辑:
此外,以下编译失败。为什么会这样:
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 已经很好用了。
感谢您的任何建议。
perl - 如何删除 Tk::HList 中选择的虚线?
当通过单击选择 Tk::HList 中的条目时,将在该条目周围绘制一条虚线。我不想有这条线。我该如何配置它?我没有看到任何记录在案的方法。
下面是一些示例代码,显示了带有预选条目的 Tk::HList。单击该条目时,将出现一条虚线。
scala - 基于类的类型参数使用 Poly1 在方法中映射 HList
我有类,参数化HList
和其他类型。如何在其中一种方法中使用map
on HList
?
此代码的编译抛出java.lang.AssertionError
:
我的目标是这样的结果:
scala - 从两个 HList 中创建所有对的 HList
我在 Scala 中使用 shapeless,我想编写一个函数 allPairs,它将采用两个 HList 并返回所有元素对的 HList。例如:
知道怎么做吗?
另外,我想强调一下,我正在寻找一个函数,而不是内联的代码块。
haskell - Haskell:显示 Hlist 上“可显示”的所有元素
我努力了
但它回来了
haskell - 使用通用函数映射异构数据结构
我正在研究 HList 实现,但我一直在尝试map
为它实现一个函数。我尝试了很多不同的方法,但每一种方法我都会遇到与该函数相关的编译器错误。
以下是我想如何使用通用函数Just
将其应用于输入数据结构的所有元素的示例。
有了这个,我得到以下编译器错误:
有没有办法解决这个问题,如果没有,那为什么?
haskell - HList 项目的共享约束
假设我们对 HList 有如下定义:
是否有可能以某种方式对其项目实施共享约束?
例如,以下是我尝试将项目限制为具有Show
实例,但失败并显示Couldn't match type `Char' with `Int'
:
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 函数替换为
工作正常,但需要编写大量冗余代码(好吧,这个解决方案会比我们当前使用元组的解决方案更好)。有人可以提示我如何解决这个问题吗?
谢谢,克林克
scala - 模拟解析器连接的无形 HList 的提取器`~`
问题
是否有可能以某种方式为无形创建一个提取器,HList
如下所示。
- 替换
::
为~
,这应该不是问题。 - 摆脱终止
HNil
。有没有可能出现的问题?
动机
经过大量的汗水和泪水,我终于到达了以下代码的工作点:
expInt
Int
在某个 monad 中解析一个E
。的类型(expInt ~ "+" ~ expInt).llE
是E[Int :: String :: Int :: HNil]
。
我希望左边的模式在<-
某种程度上类似于右边的组合解析器的构造。