问题标签 [refined]

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 投票
2 回答
1844 浏览

scala - 运行时值的精炼和存在类型

假设我想在一些字符串和整数标识符之间进行映射,并且我希望我的类型不会因为有人试图查找超出范围的 id 而导致运行时失败。这是一个简单的 API:

但是,如果用户通常会从中获取他们的 idgetId并因此知道它们是有效的,那么这很烦人。从这个意义上说,以下是一种改进:

现在我们可以有这样的东西:

然后我们的用户可以使用Vocab[TagId]而不必担心getValue在典型情况下检查查找是否失败,但如果需要,他们仍然可以查找任意整数。但是,这仍然很尴尬,因为我们必须为每种我们想要词汇表的事物编写一个单独的类型。

我们也可以用提炼做这样的事情:

现在即使S在编译时不知道,编译器仍然能够跟踪它给我们的 ids 介于 0 和 之间的事实S,这样我们就不必担心运行时失败的可能性返回值(当然,如果我们使用相同的vocab实例)。

我想要的是能够写这个:

这样用户就可以在真正需要时轻松查找任意整数。但是,这不会编译:

我可以通过提供一个Witness实例来编译它S

当然,当值超出范围时,它会失败(在运行时但安全):

我也可以将见证定义放在我的Vocab类中,然后vocab._在需要时导入以使其可用,但我真正想要的是能够在refineV没有额外导入或定义的情况下提供支持。

我尝试过各种类似的东西:

但这仍然需要为每个vocab实例明确定义:

我知道我可以witVocabS用宏来实现,但我觉得应该有更好的方法来做这种事情,因为它看起来是一个非常合理的用例(而且我对提炼不是很熟悉,所以完全有可能我错过了一些明显的东西)。

0 投票
1 回答
97 浏览

scala - 使用 Refined 重试?

使用精炼,我试图定义f

由于这不起作用,我求助于:

理想情况下,我想将此 Idris 程序转换为 Scala:

但我不确定Nat能力上的任何模式匹配。

0 投票
0 回答
81 浏览

scalatest - 使用 scalatest MustMatchers 和 Await 改进的 Scala 2.11 导致编译器错误“尝试执行类型变量的 lub/glb ?F[?T,?B]”

我一直在尝试使用精炼的 scalatest 并且在“typer”阶段遇到编译器错误:trying to do lub/glb of typevar ?F[?T, ?B]

这是我使用独立的菊石脚本对问题进行极简再现的最佳尝试:

如果您对上述内容进行以下任何一项更改,它将成功编译:

  • 删除:import eu.timepit.refined.auto.autoInfer
  • 删除:with MustMatchers从类定义中
  • 删除:Await.result(fut, atMost = duration)

澄清一下,这是一个编译错误,而不是运行时错误。在 sbt 中运行时,最初的错误发生在 play 应用程序(scala 2.11.11)test:compile中,但使用 ammonite 脚本可能更容易重现它。

我使用的菊石版本提供了版本信息:

安装使用:


ammonite 示例中的更多错误详细信息:

从 play sbttest:compile我也得到这种输出:


这不是一个严重的问题,因为我可以删除autoInfer导入,因为我实际上并没有使用它。但它会绊倒人们,因为他们倾向于这样做:

从编译时常量自动转换为精炼类型,当他们可能只是逃避:

0 投票
1 回答
920 浏览

scala - 将 PureConfig 与 Refined 一起使用?

我有以下conf文件:

阅读此文件时,我正在尝试使用提炼和提炼的纯配置。我有以下课程:

这是阅读以下案例类:

但是,当我尝试编译它时,出现以下错误:

我真的不确定如何创建这样的隐含?

0 投票
0 回答
289 浏览

scala - 使用 pureconfig 的自定义类型?

我将 PureConfig 与 Refined 一起使用。我有以下案例类:

ServerPort 是我使用 Refined 定义的自定义类型。我正在使用 pureconfig 将 conf 文件加载到 Config 案例类中,如下所示:

但是,每当我运行它时,都会出现以下错误:

有没有办法可以使用 pureconfig 来读取自定义类型?

0 投票
0 回答
575 浏览

scala - 如何使用精炼库根据彼此类型的类定义 A 和 B?

问题:

我有一个案例类乘客,它从 A 点开始到 B 点。

有效乘客意味着 A 点不等于 B 点。

问题:

如何使用refind库设计乘客类以达到目标?

我认为Passenger应该采用两个或一个细化的类型参数,例如:

例子:

我希望以下代码无法编译:

这可以正确编译:

0 投票
1 回答
345 浏览

regex - 如何在scala中为值为1-9的字符串编写精炼的类型正则表达式

我有一个字符串文字,它被发送到一个方法。该方法有一个类型安全的参数,它接受一个字符串。

类型安全参数应该包含a作为第一个字母 Then 除零以外的任何数字。

我在 scala 中写了一个精炼类型的匹配器

问题在于它接受从 1 到 9 的数字 Say a1a2。不幸a0的是,它也受支持。我想避免0

有没有办法加强正则表达式?

0 投票
1 回答
319 浏览

scala - Scala Refined size 上的模式匹配

我想根据不同的类型(包括精炼的Scala)提供案例类的json模式(在编译时)

我希望能够对所有无形的自然进行模式匹配:

typeOf[Size[_]]代替typeOf[Size[_0]]

但我有一个编译错误:

我想得到一个 int 的大小

用法 :

0 投票
1 回答
403 浏览

scala-cats - 与 Cats 和 Refined Types 一起使用时无法生成 Circe 解码器

我写了这段代码

这工作正常并且可以编译。但是如果我更改我的产品类型以使用猫非空集。

我收到编译时错误

我该怎么做才能像为 List 一样自动生成 NonEmptySet 的解码器?

0 投票
1 回答
85 浏览

scala - 尝试在使用细化时保持类型未包装

我正在尝试使用细化来创建基于原语的智能构造函数并避免包装,因为相同的类型可能用于大型集合。我这样做对吗?似乎工作,但有点样板

接着