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

scala - 我如何开始在 scala 中学习无形的概念

我想了解 Scala 中的多型概念,我遇到了 shapeless 库,这将是学习和应用 shapeless 的最佳起点。

0 投票
1 回答
806 浏览

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 函数替换为

工作正常,但需要编写大量冗余代码(好吧,这个解决方案会比我们当前使用元组的解决方案更好)。有人可以提示我如何解决这个问题吗?

谢谢,克林克

0 投票
7 回答
12904 浏览

scala - Map Scala 中的不同类型

我需要一个 Map,在其中放置不同类型的值(Double、String、Int、...),键可以是 String。

有没有办法做到这一点,这样我就可以得到正确的map.apply(k)类型

我已经尝试过使用泛型类型

但这是不可能的,因为Container需要一个参数。有什么解决办法吗?

0 投票
1 回答
349 浏览

scala - 如何将大小写与无形变量匹配?

如何将大小写与无形变量匹配?

假设我有以下类型的变量shapeless.::[String,shapeless.::[String,shapeless.HNil]]

目前我必须这样做

我可以以某种方式放松String :: String :: HNil到字符串对,这样我就不必在单独的语句中执行了吗?

0 投票
2 回答
186 浏览

scala - 如何从函数返回多个 HList 变体?

什么是无形的编码方式如下?:

然后以某种方式使用它:

请注意,上面的方法主要是不正确的,原因类似于“为什么 `List[B]` is not a subtype of `Seq[L]` when `class B extends A` and `L <: A`? ”。

0 投票
2 回答
3895 浏览

scala - 使用类型参数进行类型转换

java.lang.ObjectGiven 是一个为给定字符串返回 s 的 Java 方法。我想将此方法包装在 Scala 方法中,该方法将返回的实例转换为某种类型T。如果转换失败,该方法应该返回None. 我正在寻找类似的东西:

(如何)这可以使用 Scala 的反射 API 来实现吗?我很清楚convert可能必须更改的签名。

0 投票
4 回答
7040 浏览

scala - Scala 参数模式(喷雾路由示例)

抱歉标题含糊……不知道如何描述这一点。

一段时间以来,我已经在 Scala 中看到/使用了某种代码结构,但我不知道它是如何工作的。它看起来像这样(来自喷雾路由的示例):

在此示例中,路径中的分段分别绑定到关联块内的 a 和 b。我知道如何使用这种模式,但它是如何工作的?为什么它没有将某些东西绑定到“foo”?

我对喷雾如何在这里达到我的目的不太感兴趣,但是这是 Scala 的什么工具,我将如何编写自己的工具?

0 投票
0 回答
174 浏览

scala - 构造存储在别处(不在 vals 中)的新对象类型和实例

考虑以下类:

数据直接存储在实例中。我想将数据存储在“其他地方”的严格类型的地图中。就像是:

然后我想构建一个严格类型的映射,类似于shapelessHList中的 s 。就像是:

mapAddress应该具有完全描述插槽集的类型:

mapAddress实例应包含插槽列表(这很容易)。

最后,我们将获得一种构造复合“对象”的方法,它具有直接声明对象的所有优点,但可以存储在“其他地方”。像没有反射的反射。

问题是——如何完成目标?scalaz / shapeless如何用于此目的?

0 投票
1 回答
1539 浏览

scala - 模拟解析器连接的无形 HList 的提取器`~`

问题

是否有可能以某种方式为无形创建一个提取器,HList如下所示。

  1. 替换::~,这应该不是问题。
  2. 摆脱终止HNil。有没有可能出现的问题?

动机

经过大量的汗水和泪水,我终于到达了以下代码的工作点:

expIntInt在某个 monad 中解析一个E。的类型(expInt ~ "+" ~ expInt).llEE[Int :: String :: Int :: HNil]

我希望左边的模式在<-某种程度上类似于右边的组合解析器的构造。

0 投票
1 回答
444 浏览

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)而不需要手动将模式与案例匹配,只是再次重新应用参数

本质上我想做这样的事情