AutoRefineV是否没有从Map中获取显式推断?

时间:2019-05-22 15:01:38

标签: scala refinement-type

我有一个改进的类型定义,如下所示:

type D = String Refined Regex "(a|b)"

我可以在表示值的一行中使用细化,但是出于某种原因,autoRefineV在Map的上下文中使用时不会选择它,即使类型是显式的。例如:

import eu.timepit.refined.auto.autoRefineV
val test1: D = "a" // this is fine
val test2 = Map[D, String]("a" -> "test") // this fails
val test3: Map[D, String] = Map("a" -> "test") // this also fails
val test4 = Map(test1 -> "test") // this works!

我得到的错误是:

found : (String, String)
required : (D, String)

因此由于某种原因,该值未从字符串自动转换为D类型吗?我是否需要定义类型Map[D, String]的精炼对象?我需要使用见证人(我不知道该如何使用)吗?

1 个答案:

答案 0 :(得分:3)

您有一个从StringD的隐式转换,但是test2/3的定义将需要一个从(String, String)(D, String)的转换。

val test5 = Map(("a": D) -> "test")

如果您只想一行编写它应该可以工作。