问题标签 [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.
scala - 将单个参数转换为具有无形 Generic 的 HList
我有以下方法:
如果我通过两个以上的参数,它就可以完美地工作:
但是当我传递一个参数时,它无法隐式解析:
它找不到 Generic implicit for [String, Nothing]
,为什么它在其他情况下有效?
scala - 使用裸类型参数创建无形多态函数
如此处所述
我有一个带有以下签名的方法
Slick数据库会话Session
在哪里;该方法的基本实现是
(其中db
是 Slick Database
)以及添加诸如日志记录、缓存、多线程等内容的其他实现。特别是,多线程实现用于funs.grouped(ceil(funs.size / threadCount)).map(funs => Future {})
在多个线程之间划分功能。
我想创建一个接受函数元组的方法版本,以便我可以返回不同类型的值 - 如上面链接的问题中所述,我不知道将元组拆分为更小的好方法元组,然后重新组合多线程案例的结果,但该问题的答案是使用Shapeless库的HList
s - 但是我不清楚如何创建(Session) => T
函数的多态变体,问题是所有我见过的多态函数的示例使用包装类型参数,例如(Set ~> Option)
,每个都包装一个 polymorphic T
,但我正在尝试创建一个(Session ~> T)
函数,其中Session
不变且多态T
不包含在Set
orOption
等等。由于对Shapeless没有足够的经验,我无疑以错误的方式看待这个问题。
如何使用 Shapeless 创建def execute(funs: Seq[(Session) => T]): Seq[T]
函数的多态版本?
scala - HList 元素的类型级包装器
是否可以创建一个类型级函数,为 HList of Sets 的类型提供紧凑的语法?
使以下行:
可以改写为:
scala - 如何使用 HList 验证输入?
我正在使用 Shapeless 2.0 并且我正在尝试使用 HList 来验证输入——在编译时执行尽可能多的检查。
我有一个 HList spec
,它指定了我期望的输入类型(应在编译时检查类型),还可能包括要执行的运行时检查(例如,测试数字是偶数还是奇数)。
考虑以下规范:
以及各种样本输入:
我将如何制作一个我可以有效执行的功能:
所以会发生以下情况:
scala - 选项签入 HList,Scala
所以,有以下hlists
几种选择:
要创建一个包含所有匹配类型对象(它们的 TypeTags)的新列表,可以使用liftA2
函数(https://stackoverflow.com/a/14456938/1092399)(注意:有重复的类型和很多HNil
对象结果,但这不是问题):
所以现在的目标是跳过所有空Option
对象(如果我们能做到这一点,那么就有机会建立一个匹配所有空Option
对象的列表);我们需要这样的东西:
上面的函数是错误的,因为发生了类型擦除(在结果中键入 ~ Product with Serializable with shapeless.HList
)。所以问题是:有没有办法进行这样的检查,或者它完全不真实?
case
ps在这种情况下这是一个非常有趣的类型:Product with Serializable with shapeless.HList
scala - 考虑案例类属性,有什么办法可以绕过案例类扩展的限制?
我想考虑我的案例类的一些常见属性,比如 id 和时间戳,来编写这些通用代码。以下工作正常,但我必须在每个案例类上重复所有属性:
另一种选择是将这些公共字段放在 MetaData 类型的单个字段上:
但我真的不喜欢一直写 .metadata.id 。此外,我想使用 Slick 将这些案例类存储在数据库中,并且这种嵌套在表定义中引入了许多额外的样板。我宁愿喜欢类似以下的东西:
其中 Client 和 Order 都具有这些 id 和时间戳 (val) 字段并相应地定义了应用/取消应用。
shapeless/scalaz 可以在这里帮助我吗?
scala - scala无定形镜片不工作
在我的项目中,我遇到了需要对作为案例类实例的不可变对象执行嵌套更新的情况。
首先,我只是想使用copy
案例类提供的功能,但后来我偶然发现了镜头。我查看了实现Shapeless
并Scalaz
决定我将尝试使用来自的镜头Shapeless
,所以我抓住了依赖项,添加"com.chuusai" % "shapeless" % "2.0.0" cross CrossVersion.full
到我的build.sbt
并尝试根据以下可用示例编写一些简单的东西GitHub
:https ://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中的示例,现在它可以正常工作了.
scala - 缺少大小.unapply
在object Sized
(在“shapeless/sized.scala”中)有unapplySeq
,不幸的是它不提供静态检查。例如下面的代码将在运行时失败MatchError
:
最好有unapply
方法,返回元组的Option,根据Sized实例的大小构造元组的具体形状。例如:
在这种情况下,之前的代码片段将无法使用constructor cannot be instantiated to expected type
.
请帮我unapply
实现object Sized
。这种方法是否已经在任何地方实施?
提前致谢!
scala - leftReduce 泛型类型的无形 HList
这基本上就是我想要的:
所以combineHLatest(Foo(1) :: Foo("hello") :: HNil)
应该产量Foo( (1, "hello") )
上面没有编译,因为它找不到隐式 LeftReducer 但我不知道如何实现一个。
scala - 在不同类型的案例类之间安全地复制字段
假设您有如下案例类
然后使用以下变量实例化类
有没有办法使用该.copy
方法(或其他方法),将 Test2 中的变量应用于 Test1,例如
如果这在纯 scala 中是不可能的,那么如何在 Shapeless 1/2 中完成(当前代码在 Shapeless 1 中,但是我们计划在某个时间点升级到 Shapeless 2)