我正试图解决这个问题。我想在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]
但也许有更好的方式