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可以帮助解决类型丢失问题这正是我所需要的