我正在尝试解决这个问题。我想在 Scala 中实现这个功能
def toSeq[U,T](f: U=>Seq[T]): Stream[U=>T] = ???
我想解决方案应该使用 Stream,但我不知道如何解决这个问题。
编辑
我将尝试描述导致我遇到此问题的用例。我正在创建一个 DSL 来表达从不同数据源中提取的数据。DSL 允许定义这样的提取(U 是源类型,T 是提取类型)
type Mapping[-U, T] = U => T
trait Source[T , U]
case class SingleValueSource[T U](mappings: Seq[Mapping[U, T]]) extends Source[T, U]
case class OptionalValueSource[T , U](mappings: Seq[Mapping[U, Option[T]]]) extends Source[T, U]
case class SeqValueSource[T , U](mapping: Mapping[U, Seq[T]]) extends Source[T, U]
例如,我希望能够结合所有这些映射来构建新的 Source
def addMapping(source: Source[U,T], mapping: Mapping[U, T]): Source[U,T]
def addMapping(source: Source[U,T], mapping: Mapping[U, Option[T]]): Source[U,T]
def addMapping(source: Source[U,T], mapping: Mapping[U, Seq[T]]): Source[U,T]
当我试图实现时,我问的功能出现了
def addMapping(source: SeqValueSource[U,T], mapping: Mapping[U, Option[T]]): Source[U,T]
但也许有更好的方法