Я пытаюсь сделать это сушилку:Deterimine конкретного типа без явного согласования
type CollectPredicate = PartialFunction[Option[SqlArgument], SQLActionBuilder]
val cp: CollectPredicate = {
case Some(lc: LanguageCode) => buildSql(lc)
case Some(bh: BlobHashs) => buildSql(bh)
case Some(lsi: LastSeenId) => buildSql(lsi)
}
Я хочу найти способ сделать что-то вроде:
type args = LanguageCode :+: BlobHashs :+: LastSeenId :+: CNil
val PlacesRequestType = Coproduct[args]
val cp = (sq: args) => buildSql(PlacesRequestType(sql))
Это buildSql:
def buildSql[T, A](args: T)(implicit sqlArgument: SqlArgumentBuilder[T, A], sp: SetParameter[A]): SQLActionBuilder = {
sqlArgument.sql(args)
}
Я не уверен, что копродукт - это правильный путь, мне нужно как-то найти конкретный тип экземпляра без явного что-то похожее на него или что-то подобное.
ли 'cp' должны быть' PartialFunction'? Или ваша цель просто иметь общий метод/функцию, которая передает свой аргумент на 'buildSql'? –
Не нужно быть 'PartialFunction', общая функция была бы еще лучше – raam86