DS
Size: a a a
DS
Dv
Dv
// В реальности конфиги на много десятков полей суммарноЛибо оставляем только опциональную и нам в бизнес логике придется руками постоянно кастовать значения из нуллябельных в не нуллябельные тем или иным способом.
final case class Config(address : String, featureConfig: FeatureConfig, ...)
final case class FeatureConfig(...)
final case class OptionalConfig(address: Option[String], featureConfig: Option[OptionalFeatureConfig])
final case class OptionalFeatureConfig
def merge(example: Config, external: OptinalConfig): Config = ???
final case class Config[F[_]](address : F[String], featureConfig: F[FeatureConfig[F]], ...)
def merge(example: Config[Id], external: Config[Option]): Config[Id] = ???
Dv
Dv
Dv
DS
DS
DS
Dv
// В реальности конфиги на много десятков полей суммарноЛибо оставляем только опциональную и нам в бизнес логике придется руками постоянно кастовать значения из нуллябельных в не нуллябельные тем или иным способом.
final case class Config(address : String, featureConfig: FeatureConfig, ...)
final case class FeatureConfig(...)
final case class OptionalConfig(address: Option[String], featureConfig: Option[OptionalFeatureConfig])
final case class OptionalFeatureConfig
def merge(example: Config, external: OptinalConfig): Config = ???
final case class Config[F[_]](address : F[String], featureConfig: F[FeatureConfig[F]], ...)
def merge(example: Config[Id], external: Config[Option]): Config[Id] = ???
Dv
Dv
Option
у тебя остался только один тип, хорошоDv
DS
Dv
DS
DS
Dv
DS
final case class MinimalData[F[_]](routes: F[Route], stops: F[Stops], scheduleEntries: F[ScheduleEntry], ...)Когда мне надо было достатать информацию о числе строк, не зачитывая их целиком, делал так:
val statistics = readData[Stats](...)
prepare(statistics)
// мог где нужно зачитать данные лениво
val lazy = readData[LazyStorage](...)
...
lazy.routes.use(rows => rows.map(...))
// где нужно сразу в эффективное хранилище
val eager = readData[EagerStorage](...)