Таким образом, проблема заключается в понимании HLists бесформенной библиотеки https://github.com/milessabin/shapeless; Я использую HLists
для хранения некоторых функций, то есть:Неоднородные списки в Scala; используя функцию карты
val list = HList(
function1(_),
function2(_),
....
functionn(_)
);
И это отлично работает: я могу взять любую функцию из списка и применить его: list.head(object)
Но я проблема его применения с map
функция (list map mapFunc
):
object mapFunc extends Poly1 {
implicit def default[T] =
at[T](t => {
t(obj)
})
}
Это говорит Application doesnt take parameters
. Так как я могу с этим справиться? Мб, я не понимаю, что? Я новичок в Scala.
p.s. есть интересный эффект с конструктором, этот код строит неверный lil бит:
function1(_) :: function2(_) :: HNil
признан функцией какого-либо типа, но HList(function1(_), function2(_))
имеет нужный тип.
EDIT
'постскриптум' было принято решение - function1(_) :: function2(_) :: HNil
действительно имеет несоответствие типа; но function1 _ :: function2 _ :: HNil
в порядке!
oh sry, действительно 'HNil', я ошибся при написании вопроса, исправлен, thx! – DaunnC
Хм, да, я вижу, это действительно интересно; и если я хочу иметь много разных функций, от разных типов до какого-то другого типа? как ~ 'def function1 (s: Type1) = convertType1ToType2' ...' def functionn (s: Typen-1) = convertTypen-1ToTypen'; Я имею в виду smth like 'at [FromType => ToType]'; mb есть способ не писать все случаи для применения неявной функции? – DaunnC
@DaunnC, если вы хотите применить HList функций к HList аргументов, тогда вы должны исследовать zipApply ... но это другой вопрос. –