问题标签 [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.

0 投票
1 回答
144 浏览

scala - 无法从无形中重现 Monoid 示例

我尝试从以下位置重现 Monoid 示例:https ://github.com/milessabin/shapeless/blob/master/examples/src/main/scala/shapeless/examples/monoids.scala

我尝试使用 Shapeless-2.0.0-SNAPSHOT 和 Shapeless-2.0.0-M1。我还需要一些其他的东西吗?

谢谢费边

0 投票
2 回答
547 浏览

scala - Scala 高级类型用法

的背景

我正在使用 Scala 开发一个事件库。在我的库中,您可以定义如下事件:

你可以像这样触发它们:

您可以创建这样的反应:

并将它们附加到这样的事件中:

还有一些其他的东西(比如事件转换、组合等)。我使用Esper CEP 引擎作为库的后端。Esper 对大多数操作使用一种称为 EPL 的类似 SQL 的语言。

问题

我正在尝试实现一些更高级的概念,例如事件连接。所以现在你可以像这样定义具有多个属性的事件(使用元组类型):

然后像这样加入他们:

它在它们各自的第一个属性相等的条件下,对两者的最后 30 次出现执行 e1 和 e2 的连接。

这没关系,但我想摆脱实现中的字符串以使事件表达式类型可检查。我想将连接表达式更改为如下所示:

类似于它在例如完成的方式。斯奎尔。问题是,我无法访问元组类型元素的类型......

问题

如何静态访问元组类型?现在我只能通过反射在运行时访问它们,这对我没有帮助。我很确定元组无法实现我想要实现的目标,但我想知道使用无形库中的 HLists 或类似的东西是否有助于实现我的目标。

0 投票
1 回答
304 浏览

scala - 匹配类型参数的准引用类型是什么?

我有一个 quaasiquote 匹配器 where q"someMethod[$ts]()"where def someMethod[I <: shapeless.HList]()"

印刷ts给出:

或者,例如

然后我尝试分配:

导致编译器错误:

如何List[scala.reflect.api.Types.Type]作曲ts

0 投票
3 回答
1086 浏览

scala - 在Scala中添加整数元组列表

我希望添加一个整数元组列表,即给定一个元组 k 的输入列表生成一个元组k的元组,其字段是列表中元组的相应字段的总和。

输入

输出

我试图使用foldLeft,但我无法编译它。现在,我正在使用for循环,但我正在寻找更简洁的解决方案。

0 投票
1 回答
334 浏览

scala - 为无形 hlist 定义 scalaz monad 实例

我试图为无形的通过和实现定义一个Monad(scalaz) 。第一个问题是trait 不是类型构造函数,但可以用类型 lambdas 解决,很简单,但我找不到正确的实现,我想我需要一些类型的函数和一些技巧,但那一面无形对我来说仍然是黑暗的。所有的函数都是一个 Monad,比如简单的 List,所以可以从 Scalaz 中实现一个吗?HListpointbindHListpointbindPoly1Aux/MapperHList

0 投票
0 回答
544 浏览

scala - 使用无形的多态反序列化函数

我正在尝试使用 shapeless 为 hlists/csv 编写多态反序列化函数

这是提供序列化/反序列化的 Value 类型类的定义(我知道结果可能应该返回并且 Option/Either/Validation 显示解析失败,但稍后会出现)

以下序列化功能效果很好

并且我能够成功地将它映射到具有支持 Value[_] 类型类的类型的 HList 上:

以下是我尝试过的 2 个不同版本的反序列化函数:

我想最终在这样的功能中使用它

但是,当我尝试使用反序列化函数映射 HList 时,甚至当我尝试像这样单独使用它时:

编译器抱怨模棱两可的隐含值​​:

我的目标是使用此函数映射具有值 [_] 类型的 HList 的字符串列表,以便对它们进行序列化,但是因为即使在尝试对单个字符串应用“反序列化”函数时我也遇到了相同的错误,我希望先解决这个问题。

我正在努力提供额外的类型提示来引导编译器,因为 scala 不支持类型级别的柯里化,我应该使用类似 lambda 类型的东西吗?

有没有其他方法可以表达这种类型的功能?

0 投票
2 回答
2635 浏览

scala - 将无形可扩展记录传递给函数

我正在尝试学习 Shapeless(使用 2.10.2 版)。我创建了一个非常简单的可扩展记录:

val rec1 = ("foo" ->> 42) :: HNil

根据 REPL,这有类型

shapeless.::[Int with shapeless.record.KeyTag[String("foo"),Int],shapeless.HNil]

我正在尝试定义一个简单的函数:

但它甚至不编译。我不能在类型声明中使用 String("foo") 并得到一个错误。

我有两个问题:

  1. 如何在我的代码中指定可扩展记录的类型?
  2. 当处理具有更多字段的记录时,类型声明的长度和复杂性将难以管理。给定记录的特定实例或其他解决方法,有没有办法为该类型创建别名?

编辑

我发现:

效果很好。我得出结论rec1、rec2 和x 属于同一类型。我只是不知道如何在代码中表达这种类型!

0 投票
1 回答
1007 浏览

list - Scala 中的异构列表;使用地图功能

所以问题在于无形库的理解 HLists https://github.com/milessabin/shapeless;我HLists用来存储一些功能,即:

而且效果很好:我可以从列表中获取任何功能并应用它: list.head(object)

但是,我在使用map函数(list map mapFunc)应用它时遇到问题:

它说Application doesnt take parameters。那么我该如何处理呢?Mb 我不明白吗?我是 Scala 的新手。

ps 构造函数有一个有趣的效果,这段代码正在构建 lil 有点不正确:

function1(_) :: function2(_) :: HNil它被识别为某种类型的函数,但HList(function1(_), function2(_))具有正确的类型。

编辑

'ps' 已决定——function1(_) :: function2(_) :: HNil确实有类型不匹配;但function1 _ :: function2 _ :: HNil没关系!

0 投票
1 回答
565 浏览

list - 动态增长的异构列表,Scala

有没有办法坚持(我的意思是保持在一个变量中)(有可能吗?)动态增长HList?我的伪代码:

显然,这段代码不起作用。list.head所以 ofc 它可以工作,但由于输入不正确,我们甚至不能这样做HList(据我所知,list甚至根本不保留类型参数)。

结果类型:

所以,这是不正确的。

编辑

上面的信息还不够,我明白了。

所以我想有一些对象,就像一个变量,它可以是任何HList类型的;

为了有时HList在这个变量中传递;

ps @milessabin mb 是的,最好为我的问题找到另一个解决方案。

0 投票
0 回答
232 浏览

scala - 可变异构列表,Scala

是否可以将元素添加到一些应该是异构列表的可变对象?

所以我的意思是,我正在处理 Dijkstra 的算法,我需要以这种方式将一些函数保留在图形的弧中:

其中start- 是起始节点;end- 结束节点;f- 是节点之间的一些函数,Arc 是保持这个函数的对象,这对我来说是最重要的。

这一切都很完美,但我将所有弧线保存在节点内的列表中:

你看,问题是我们在简单列表中丢失了类型;在向我们的节点添加新弧时,我们将完全丢失有关类型的所有信息。

解决问题的可能方法是使用HLists; 一些工作代码的示例(为解释添加更多信息):

顺便说一句,现在一切都是这样的:

所以问题是我怎样才能像下面的代码一样制作smth(它是不正确的——类型错误),并将元素添加到这个HList:

因为我什至不知道如何传递这种类型的不匹配,而且我看不到任何方法可以将所有转换保留为节点的字段并保留所有类型。

编辑

嗯,我可以将转换传递给构造函数,而根本不使用可变对象。