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

scala - 将单个参数转换为具有无形 Generic 的 HList

我有以下方法:

如果我通过两个以上的参数,它就可以完美地工作:

但是当我传递一个参数时,它无法隐式解析:

它找不到 Generic implicit for [String, Nothing],为什么它在其他情况下有效?

0 投票
1 回答
997 浏览

scala - 使用裸类型参数创建无形多态函数

如此处所述

将元组划分为多个元组的类型安全方法

我有一个带有以下签名的方法

Slick数据库会话Session在哪里;该方法的基本实现是

(其中db是 Slick Database)以及添加诸如日志记录、缓存、多线程等内容的其他实现。特别是,多线程实现用于funs.grouped(ceil(funs.size / threadCount)).map(funs => Future {})在多个线程之间划分功能。

我想创建一个接受函数元组的方法版本,以便我可以返回不同类型的值 - 如上面链接的问题中所述,我不知道将元组拆分为更小的好方法元组,然后重新组合多线程案例的结果,但该问题的答案是使用Shapeless库的HLists - 但是我不清楚如何创建(Session) => T函数的多态变体,问题是所有我见过的多态函数的示例使用包装类型参数,例如(Set ~> Option),每个都包装一个 polymorphic T,但我正在尝试创建一个(Session ~> T)函数,其中Session不变且多态T不包含在SetorOption等等。由于对Shapeless没有足够的经验,我无疑以错误的方式看待这个问题。

如何使用 Shapeless 创建def execute(funs: Seq[(Session) => T]): Seq[T]函数的多态版本?

0 投票
1 回答
81 浏览

scala - HList 元素的类型级包装器

是否可以创建一个类型级函数,为 HList of Sets 的类型提供紧凑的语法?

使以下行:

可以改写为:

0 投票
1 回答
376 浏览

scala - 如何使用 HList 验证输入?

我正在使用 Shapeless 2.0 并且我正在尝试使用 HList 来验证输入——在​​编译时执行尽可能多的检查。

我有一个 HList spec,它指定了我期望的输入类型(应在编译时检查类型),还可能包括要执行的运行时检查(例如,测试数字是偶数还是奇数)。

考虑以下规范:

以及各种样本输入:

我将如何制作一个我可以有效执行的功能:

所以会发生以下情况:

0 投票
0 回答
154 浏览

scala - 选项签入 HList,Scala

所以,有以下hlists几种选择:

要创建一个包含所有匹配类型对象(它们的 TypeTags)的新列表,可以使用liftA2函数(https://stackoverflow.com/a/14456938/1092399)(注意:有重复的类型和很多HNil对象结果,但这不是问题):

所以现在的目标是跳过所有空Option对象(如果我们能做到这一点,那么就有机会建立一个匹配所有空Option对象的列表);我们需要这样的东西:

上面的函数是错误的,因为发生了类型擦除(在结果中键入 ~ Product with Serializable with shapeless.HList)。所以问题是:有没有办法进行这样的检查,或者它完全不真实?

caseps在这种情况下这是一个非常有趣的类型:Product with Serializable with shapeless.HList

0 投票
1 回答
698 浏览

scala - 考虑案例类属性,有什么办法可以绕过案例类扩展的限制?

我想考虑我的案例类的一些常见属性,比如 id 和时间戳,来编写这些通用代码。以下工作正常,但我必须在每个案例类上重复所有属性:

另一种选择是将这些公共字段放在 MetaData 类型的单个字段上:

但我真的不喜欢一直写 .metadata.id 。此外,我想使用 Slick 将这些案例类存储在数据库中,并且这种嵌套在表定义中引入了许多额外的样板。我宁愿喜欢类似以下的东西:

其中 Client 和 Order 都具有这些 id 和时间戳 (val) 字段并相应地定义了应用/取消应用。

shapeless/scalaz 可以在这里帮助我吗?

0 投票
1 回答
827 浏览

scala - scala无定形镜片不工作

在我的项目中,我遇到了需要对作为案例类实例的不可变对象执行嵌套更新的情况。

首先,我只是想使用copy案例类提供的功能,但后来我偶然发现了镜头。我查看了实现ShapelessScalaz决定我将尝试使用来自的镜头Shapeless,所以我抓住了依赖项,添加"com.chuusai" % "shapeless" % "2.0.0" cross CrossVersion.full到我的build.sbt并尝试根据以下可用示例编写一些简单的东西GitHubhttps ://github.com/milessabin/shapeless/wiki /功能概述:-shapeless-2.0.0#boilerplate-free-lenses-for-arbitrary-case-classes

但在编译过程中,我收到如下错误:

可能我遗漏了一些明显的东西,因为我从 wiki 复制粘贴了一个示例。

编辑:在 Travis 发表评论后,我使用https://github.com/jrudolph/sbt-dependency-graph为我的项目生成了依赖关系图,我观察到它spray-routing已经包含shapeless库:

所以我删除了我的依赖并尝试了https://github.com/milessabin/shapeless/blob/scala-2.9.x/examples/src/main/scala/shapeless/examples/lenses.scala中的示例,现在它可以正常工作了.

0 投票
1 回答
234 浏览

scala - 缺少大小.unapply

object Sized(在“shapeless/sized.scala”中)有unapplySeq,不幸的是它不提供静态检查。例如下面的代码将在运行时失败MatchError

最好有unapply方法,返回元组的Option,根据Sized实例的大小构造元组的具体形状。例如:

在这种情况下,之前的代码片段将无法使用constructor cannot be instantiated to expected type.

请帮我unapply实现object Sized。这种方法是否已经在任何地方实施?

提前致谢!

0 投票
1 回答
926 浏览

scala - leftReduce 泛型类型的无形 HList

这基本上就是我想要的:

所以combineHLatest(Foo(1) :: Foo("hello") :: HNil)应该产量Foo( (1, "hello") )

上面没有编译,因为它找不到隐式 LeftReducer 但我不知道如何实现一个。

0 投票
1 回答
2352 浏览

scala - 在不同类型的案例类之间安全地复制字段

假设您有如下案例类

然后使用以下变量实例化类

有没有办法使用该.copy方法(或其他方法),将 Test2 中的变量应用于 Test1,例如

如果这在纯 scala 中是不可能的,那么如何在 Shapeless 1/2 中完成(当前代码在 Shapeless 1 中,但是我们计划在某个时间点升级到 Shapeless 2)