问题标签 [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 - 我如何开始在 scala 中学习无形的概念
我想了解 Scala 中的多型概念,我遇到了 shapeless 库,这将是学习和应用 shapeless 的最佳起点。
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 - Map Scala 中的不同类型
我需要一个 Map,在其中放置不同类型的值(Double、String、Int、...),键可以是 String。
有没有办法做到这一点,这样我就可以得到正确的map.apply(k)
类型
我已经尝试过使用泛型类型
但这是不可能的,因为Container
需要一个参数。有什么解决办法吗?
scala - 如何将大小写与无形变量匹配?
如何将大小写与无形变量匹配?
假设我有以下类型的变量shapeless.::[String,shapeless.::[String,shapeless.HNil]]
目前我必须这样做
我可以以某种方式放松String :: String :: HNil
到字符串对,这样我就不必在单独的语句中执行了吗?
scala - 如何从函数返回多个 HList 变体?
有
什么是无形的编码方式如下?:
然后以某种方式使用它:
请注意,上面的方法主要是不正确的,原因类似于“为什么 `List[B]` is not a subtype of `Seq[L]` when `class B extends A` and `L <: A`? ”。
scala - 使用类型参数进行类型转换
java.lang.Object
Given 是一个为给定字符串返回 s 的 Java 方法。我想将此方法包装在 Scala 方法中,该方法将返回的实例转换为某种类型T
。如果转换失败,该方法应该返回None
. 我正在寻找类似的东西:
(如何)这可以使用 Scala 的反射 API 来实现吗?我很清楚convert
可能必须更改的签名。
scala - Scala 参数模式(喷雾路由示例)
抱歉标题含糊……不知道如何描述这一点。
一段时间以来,我已经在 Scala 中看到/使用了某种代码结构,但我不知道它是如何工作的。它看起来像这样(来自喷雾路由的示例):
在此示例中,路径中的分段分别绑定到关联块内的 a 和 b。我知道如何使用这种模式,但它是如何工作的?为什么它没有将某些东西绑定到“foo”?
我对喷雾如何在这里达到我的目的不太感兴趣,但是这是 Scala 的什么工具,我将如何编写自己的工具?
scala - 构造存储在别处(不在 vals 中)的新对象类型和实例
考虑以下类:
数据直接存储在实例中。我想将数据存储在“其他地方”的严格类型的地图中。就像是:
然后我想构建一个严格类型的映射,类似于shapelessHList
中的 s 。就像是:
mapAddress
应该具有完全描述插槽集的类型:
该mapAddress
实例应包含插槽列表(这很容易)。
最后,我们将获得一种构造复合“对象”的方法,它具有直接声明对象的所有优点,但可以存储在“其他地方”。像没有反射的反射。
问题是——如何完成目标?scalaz / shapeless如何用于此目的?
scala - 模拟解析器连接的无形 HList 的提取器`~`
问题
是否有可能以某种方式为无形创建一个提取器,HList
如下所示。
- 替换
::
为~
,这应该不是问题。 - 摆脱终止
HNil
。有没有可能出现的问题?
动机
经过大量的汗水和泪水,我终于到达了以下代码的工作点:
expInt
Int
在某个 monad 中解析一个E
。的类型(expInt ~ "+" ~ expInt).llE
是E[Int :: String :: Int :: HNil]
。
我希望左边的模式在<-
某种程度上类似于右边的组合解析器的构造。
scala - 将 HList 中的验证应用于案例类
在尝试使用应用程序函子进行验证(Monad 捕获多个异常(不仅仅是单个失败))时,我在 scalaz 中遇到了一个硬限制,它不允许超过 14 个函子,所以这里有一个有用的评论(https://github .com/scalaz/scalaz/issues/504#issuecomment-23626237)引导我使用 HLists 而不是应用函子
现在它工作得非常好(由于它不在 maven https://github.com/typelevel/shapeless-contrib/blob/master/scalaz/main/scala/sequence.scala中,因此必须从这里手动放入这个序列文件之后?来源=c )
我的问题是,我知道这是可能的,你将如何自动实例化case class Foo(i:Int,s:String)
而不需要手动将模式与案例匹配,只是再次重新应用参数
本质上我想做这样的事情