Generics 我如何管理不断增加、嵌套深入的类型参数?

Generics 我如何管理不断增加、嵌套深入的类型参数?,generics,types,language-agnostic,type-parameter,Generics,Types,Language Agnostic,Type Parameter,我想知道如何管理大量深度嵌套的类型参数。代码是Scala。欢迎用任何语言回答 考虑一些配置对象 trait Source case class File(path: String) extends Source case class URL(url: String) extends Source trait Format case class CSV(delimiter: String) extends Format case class JSON extends Format case c

我想知道如何管理大量深度嵌套的类型参数。代码是Scala。欢迎用任何语言回答

考虑一些配置对象

trait Source
case class File(path: String) extends Source
case class URL(url: String) extends Source

trait Format
case class CSV(delimiter: String) extends Format
case class JSON extends Format

case class Data(format: Format, source: Source)
但实际上,我的类型信息有限,例如,我不能

def find_delimiter(config: Data) = config.format.delimiter
所以,我参数化了

case class Data[F <: Format, S <: Source](format: F, source: S)
这是一个混乱的阅读,我轻的参数。我该怎么办

事实上,类型别名是不切实际的,因为它们会扩散

def find_delimiter[S <: Source](config: Data[CSV, S]) = config.format.delimiter
def fn(config: DataSourceConfig[
  CSVConfig[ColumnDataTypeConfig[DeeplyNestedConfig[SuperDeeplyNestedConfig], OtherDeeplyNestedConfig]],
  URLConfig[FetchRetryConfig[HTTPDeeplyNestedConfig]]
]) = ???  // use deeply nested attributes here