Andrei
что-то знакомое, емнип бложек про околофп
Alexander
Романа Душкин вел блог в ЖЖ с таким названием
Andrei
oh
Alexander
можно его на Facebook или в твиттере спросить он там активен
Alexander
@bravit111 может ты знаешь?
Alex
Спасибо большое всем, кто сегодня принимал участие в процессе написания моего парсера!
Alex
Вы очень здорово помогли
Зигохистоморфный
и где конечный результат?)
Ilya
а как в Хаскеле теоремы про type level функции доказывать?
Alexander
unsafeCoerce
Зигохистоморфный
:D
Ilya
вот есть
type family RecTy (l :: Symbol) (lts :: [k1]) :: k where
RecTy l (l := t ': lts) = t
RecTy q (l := t ': lts) = RecTy q lts
Alexander
все что примитивными TF не покажется не сработает
Ilya
и
type family DB' (schema :: [(Symbol, [*])]) where
DB' '[] = '[]
DB' ('(l, r) ': fs) = l := [Rec r] ': DB' fs
Ilya
хочу из RecTy t schema r уметь получать RecTy t (DB' schema) [Rec r]
Ilya
вроде кажется просто...
Ilya
unsafeCoerce как-то не очень... но для прототипа сойдет, наверное
Alexander
не понимаю, RecTy это функция, получить из результат применения функции результат другой функции?
Ilya
да, я написал, как будто это констрейнт, сорри
Ilya
хочу RecTy t schema ~ RecTy t (DB' schema), конечно
Ilya
так они не равны, зачем бы иначе огород городить?
Ilya
schema -- это список пар (Symbol, Row), а DB' schema -- это список пар (Symbol, [Rec r])
Зигохистоморфный
Row ~ [Rec r]?
насколько я помню то рекорд изоморфен списку пар вроде
Зигохистоморфный
тайплевел списку
Ilya
это да
Ilya
но DB' берет Row и возвращает тип списка рекордов с этим Row
Ilya
ok, тут unsafeCoerce помог, а как мне констрейнты коерсить?
Ilya
как бы мне постулировать RecSize schema ~ RecSize (DB' schema)?
Зигохистоморфный
но я не знаю точно
Vitaly
Ilya
хм. Как-то я им пользовался, там вылезают ошибки типа, которые без Эдварда не понятно, как фиксить 🙂 попробую еще раз
Ilya
да он и отвечает на #haskell, на это вся и надежда 🙂
Alexander
Alexander
или TF a b возвращающую Refl a b
Alexander
а не класс типов, да, то ещё удовольствие в Haskell
Alex
Получился обычный парсер. Вечером оказалось, что конечный вид меседжей еще не утвержден, так что сам конструктор я пока писать не буду:)
Alex
и где конечный результат?)
Alex
Или вам интересен сам код?
Ю ли я? 🤔
Да, можем поревьюить :)
Ilya
меня продолжает кусать та же ошибка с переименованием:
Ilya
recSizeOfDB :: forall schema. RecSize (DB' schema) :~: RecSize schema
Ilya
• Couldn't match type ‘RecSize (DB' schema0)’
with ‘RecSize (DB' schema)’
Expected type: RecSize (DB' schema) :~: RecSize schema
Actual type: RecSize (DB' schema0) :~: RecSize schema0
Alexander
ScopedTypeVariables + forall schema?
Ilya
и дальше про то, что RecSize is a type function, and may not be injective
Alexander
ну
Ilya
но я это знаю, я как раз хочу теорему, что есть равенство 🙂
Ilya
ScopedTypeVariables включил
Alexander
и schema в forall?
Ilya
forall есть
Alexander
а можно гист?
Alexander
у меня наконец-то телеграм на компе есть
Ilya
можно github: https://github.com/yanok/queLam/blob/master/src/QueLam/R.hs
Alexander
src/QueLam/Core.hs:44:17: error:
Not in scope: type constructor or class ‘RecVecIdxPos’
|
44 | , KnownNat (RecVecIdxPos l sortedFlds)
Ilya
Да, там надо патченый superrecord
Ilya
Стеком должно собираться сорри 😀
Alexander
у меня new-build-ом нормально
Alexander
так как теперь заставить его сломаться?
Alexander
чтобы увидеть проблему
Alexander
@ilya_yanok ^
Ilya
Хм
Ilya
блин, сорри, я не закомитил
Ilya
хм, нет, вроде закомитил
Ilya
@qnikst у тебя QueLam/R.hs собирается?
Alexander
7a22bb269b2ce5bf3615a19b77ba5301354a61a1 <- ?
Alexander
а может не добавлен в cabal
Alexander
точно у тебя ж hpack
Ilya
угу, это все стэк 🙂
Alexander
скорее hpack
Alexander
стек-то ещё куда ни шло
Ilya
стэк сейчас hpack по умолчанию предлагает
Alexander
всегда знал что стек это плохо
Alexander
блин на ноуте опять сдох телеграм и чтож такое
Alex
Это было бы замечательно:)
Alex
Да, можем поревьюить :)
Alex
Завтра скину
Alexander
я заставил ту штуку скомпиляться
Alexander
не ясно что с суперрекордом делать, который неиндуктивный нифига