问题标签 [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.
scala - 运行时值的精炼和存在类型
假设我想在一些字符串和整数标识符之间进行映射,并且我希望我的类型不会因为有人试图查找超出范围的 id 而导致运行时失败。这是一个简单的 API:
但是,如果用户通常会从中获取他们的 idgetId
并因此知道它们是有效的,那么这很烦人。从这个意义上说,以下是一种改进:
现在我们可以有这样的东西:
然后我们的用户可以使用Vocab[TagId]
而不必担心getValue
在典型情况下检查查找是否失败,但如果需要,他们仍然可以查找任意整数。但是,这仍然很尴尬,因为我们必须为每种我们想要词汇表的事物编写一个单独的类型。
我们也可以用提炼做这样的事情:
现在即使S
在编译时不知道,编译器仍然能够跟踪它给我们的 ids 介于 0 和 之间的事实S
,这样我们就不必担心运行时失败的可能性返回值(当然,如果我们使用相同的vocab
实例)。
我想要的是能够写这个:
这样用户就可以在真正需要时轻松查找任意整数。但是,这不会编译:
我可以通过提供一个Witness
实例来编译它S
:
当然,当值超出范围时,它会失败(在运行时但安全):
我也可以将见证定义放在我的Vocab
类中,然后vocab._
在需要时导入以使其可用,但我真正想要的是能够在refineV
没有额外导入或定义的情况下提供支持。
我尝试过各种类似的东西:
但这仍然需要为每个vocab
实例明确定义:
我知道我可以witVocabS
用宏来实现,但我觉得应该有更好的方法来做这种事情,因为它看起来是一个非常合理的用例(而且我对提炼不是很熟悉,所以完全有可能我错过了一些明显的东西)。
scala - 使用 Refined 重试?
使用精炼,我试图定义f
:
由于这不起作用,我求助于:
理想情况下,我想将此 Idris 程序转换为 Scala:
但我不确定Nat
能力上的任何模式匹配。
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
导入,因为我实际上并没有使用它。但它会绊倒人们,因为他们倾向于这样做:
从编译时常量自动转换为精炼类型,当他们可能只是逃避:
scala - 将 PureConfig 与 Refined 一起使用?
我有以下conf文件:
阅读此文件时,我正在尝试使用提炼和提炼的纯配置。我有以下课程:
这是阅读以下案例类:
但是,当我尝试编译它时,出现以下错误:
我真的不确定如何创建这样的隐含?
scala - 使用 pureconfig 的自定义类型?
我将 PureConfig 与 Refined 一起使用。我有以下案例类:
ServerPort 是我使用 Refined 定义的自定义类型。我正在使用 pureconfig 将 conf 文件加载到 Config 案例类中,如下所示:
但是,每当我运行它时,都会出现以下错误:
有没有办法可以使用 pureconfig 来读取自定义类型?
scala - 如何使用精炼库根据彼此类型的类定义 A 和 B?
问题:
我有一个案例类乘客,它从 A 点开始到 B 点。
有效乘客意味着 A 点不等于 B 点。
问题:
如何使用refind库设计乘客类以达到目标?
我认为Passenger应该采用两个或一个细化的类型参数,例如:
例子:
我希望以下代码无法编译:
这可以正确编译:
regex - 如何在scala中为值为1-9的字符串编写精炼的类型正则表达式
我有一个字符串文字,它被发送到一个方法。该方法有一个类型安全的参数,它接受一个字符串。
类型安全参数应该包含a
作为第一个字母 Then 除零以外的任何数字。
我在 scala 中写了一个精炼类型的匹配器
问题在于它接受从 1 到 9 的数字 Say
a1
等a2
。不幸a0
的是,它也受支持。我想避免0
有没有办法加强正则表达式?
scala - Scala Refined size 上的模式匹配
我想根据不同的类型(包括精炼的Scala)提供案例类的json模式(在编译时)
我希望能够对所有无形的自然进行模式匹配:
typeOf[Size[_]]
代替typeOf[Size[_0]]
但我有一个编译错误:
我想得到一个 int 的大小
用法 :
scala-cats - 与 Cats 和 Refined Types 一起使用时无法生成 Circe 解码器
我写了这段代码
这工作正常并且可以编译。但是如果我更改我的产品类型以使用猫非空集。
我收到编译时错误
我该怎么做才能像为 List 一样自动生成 NonEmptySet 的解码器?
scala - 尝试在使用细化时保持类型未包装
我正在尝试使用细化来创建基于原语的智能构造函数并避免包装,因为相同的类型可能用于大型集合。我这样做对吗?似乎工作,但有点样板
接着