Вопрос
Как-то можно создать экстрактор для бесформенного HList, который выглядит следующим образом.
val a ~ _ ~ b = 4 :: "so" :: 4.5 :: HNil
=> a == 4 && b == 4.5
- Замените
::на~, что не должно быть проблемой. - Избавьтесь от завершающего
HNil. Существуют ли какие-либо проблемы, которые могут возникнуть?
Мотивация
После большого пота и слез мне удалось добраться до точки, где работает следующий код:
for(
x1 :: _ :: x2 :: HNil <- (expInt ~ "+" ~ expInt).llE
) yield (x1 + x2)
expInt анализирует a Int в некоторой монаде E. Тип (expInt ~ "+" ~ expInt).llE - E[Int :: String :: Int :: HNil].
Я хочу, чтобы шаблон слева от <- каким-то образом напоминал конструкцию анализатора комбинаторов справа.