0

我正在尝试解决这个问题。我想在 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]

但也许有更好的方法

4

0 回答 0