Scala 不成形窄型损耗
在下面的示例中Scala 不成形窄型损耗,scala,shapeless,singleton-type,Scala,Shapeless,Singleton Type,在下面的示例中 import shapeless._ import shapeless.syntax.singleton._ val concat = "right".narrow def extract[s <: String](x: s)(implicit witness: Witness.Aux[s]): String = witness.value extract(concat) 导入无形状_ 导入shapless.syntax.singleton_ val concat=
import shapeless._
import shapeless.syntax.singleton._
val concat = "right".narrow
def extract[s <: String](x: s)(implicit witness: Witness.Aux[s]): String = witness.value
extract(concat)
导入无形状_
导入shapless.syntax.singleton_
val concat=“右”。狭窄
def extract[s这是类型推断的失败…您会发现
extract[concat.type](concat)
会像你期望的那样工作
这并不是特别有用,因为我认为您希望从value参数推断出singleton类型为extract
。shapeless提供了到Witness
类型的隐式转换,因此以下内容可能适用于您的上下文
def extract(witness: Witness.Lt[String]): String = witness.value
这将同时接受文本字符串和窄值。您是否尝试创建了一个提取器???@PavelOliynyk您能解释一下您的意思是什么类型的提取器吗?unapply
一个吗?这一个:我感觉您需要实现unapply,@PavelOliynyk您能写一个例子说明unapply
提取器是如何实现的吗r可以帮助解决类型丢失问题这正是我所需要的