Вопрос
Как-то можно создать экстрактор для бесформенного 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]
.
Я хочу, чтобы шаблон слева от <-
каким-то образом напоминал конструкцию анализатора комбинаторов справа.