Alexander
компилируется, это полный код
Alexander
вот как так вопросы можно задавать :/
Alexander
а расскажите в каком порядке type application работает, а то явечно путаюсь
кана
я думал всегда, как в forall
Alexander
тяжело понять как подсказать ; )
Alexander
а она где-то была?
Kirill
Самой реализации не было, зато была сигнатура в интерфейсе
Alexander
давай сигнатуру
Kirill
Завтра в гит залью
Alexander
ну ок
Kirill
Сейчас код уже не под рукой
Alexander
class C1 o i where inner :: o x :- i x
Alexander
вот если я пишу inner
Alexander
у меня есть x o i в каком порядке их применять?
Alexander
блин чего-то я плохо понимаю все эти constraints
Alexander
мимимимальный пример без либы не заработал
a66ath
a66ath
Намдака что-то понесло
Konstantin
несколько лет незад
🍅Ťомат
http://lurkmore.to/Обсуждение:Haskell боже, какое чтиво
Leonid 🦇
Я Хаскелем заинтересовался из-за статьи на лурке. Про какого-то мутного ботана-троля с ЛОРа.
Dmitry
как вы это читаете
Ilya
+1 за хаскель после ЛОРа (не лурка)
Aleksei (astynax)
У вас лурчанка, сэры!
Евгений
Я заинтересовался хаскелем из-за xmonad'а, гггг
Aragaer
я наоборот 8)
Aragaer
вспомнить бы, с чего я вдруг заинтересовался хаскелем...
Alexander
товарищи
Alexander
у меня вопрос
Alexander
я хочу применить один и тот же TypeAppliocation
Alexander
но "неизвестной" переменной
Alexander
т.е. у меня есть c0`trans` proof
Alexander
в c0 и proof живет i x :- o x
Alexander
но итоговая функция у меня forall x . ...
Alexander
если бы ему скормить type application было бы норм, но мне неоткуда взять x
Alexander
о сделал
Alexander
уняня
Alexander
так.. блин как сделать case на тайпклассах
Alexander
у меня oleggery из мозга утекает
Alexander
ааааааааааааааааааа
Alexander
у меня есть Vynil Record
Alexander
(x ': xs) , если есть C0 x то один инстанс, если нет то смотреть C1 xs который бежит по всем xs
Alexander
чего-то не соображу как, но ведь вроде делал
Alexander
причем я знаю как разделить взгляд в голову и хвост, но я не знаю как отключить взгляд в хвост, если в голове все хорошо
Denis
что-то вроде этого? instance C0 f x => R f (x ‘: tl) type family RecAny C1 (f :: k -> *) (l : k) :: Constraint where … instance RecAny C1 f tl => R f (x ‘: tl)
Denis
f можно отовсюду поубирать, если (x ‘: tl) :: [*]
Alexander
instance CInf c req => CInfSearch 'Head (c:cs) req where cInfSearch _ (S proof :& _) = cInf @ c @req `trans` proof instance CInfSearch 'Head cs req => CInfSearch 'Tail (c:cs) req where cInfSearch _ (_ :& rest) = cInfSearch (Proxy @ Head) rest
Alexander
вот у меня есть такая штука
Alexander
@catamorphism не понимаю что у тебя чего-то : (
Alexander
у меня Head/Tail можно выкинуть если мешают
Denis
в заголовке инстансов должно быть (c ‘: cs) по идее, а не (c:cs)
Alexander
да пофиг
Alexander
warning скажет поправлю
Alexander
newtype (:--) x o i = S (o x :- i x) class C0 o is | o -> is where c0 :: forall x . Rec (x :-- o) is -- 1 уровень задается пользователем class CInf o req where cInf :: o x :- req x -- глубокий поиск
Alexander
т.е. для каждого элемента в Vinyl нужно посмотреть есть ли у него CInf элемент цель
Alexander
если есть до вернуть у первого, если нету, то обломаться
Alexander
если поиск в голове или проход хвоста я могу сделать, то case не могу
Alexander
для Forall бы сработало
Denis
а, я кажется понял что ты хочешь
Denis
так, планерка, сейчас бэкграундом подумаю
Alexander
причем все бы круто было если бы я на уровне типов, а не констрейнтов мог работать
Alexander
придумал похоже
Denis
по идее тебе нужна закрытая TF, которая будет констрейнт возвращать
Алексей
class Worker (ok :: Bool) (xs :: [*]) instance (Worker (WhateverTypeFun x) xs) => Class (x : xs)
Алексей
?
Alexander
TF мне словарик не даст
Alexander
ну и мне нужна TFFD минимум
Alexander
я это уже проходил, там выводиться ничерта не будет поскольку АКСИОМЫ
Алексей
Так при выборе инстанса компилятор смотрит только в instance head
Alexander
так вопрос в том, как поднять эту штуку в head
Alexander
сейчас через пару вспомогательных тайпклассов пробую
Алексей
по моему это что-то очень нездоровое
Denis
а можно на конструировании этим озаботиться, а не при разборе? Можно сделать кастомный функтор для винила, у которого есть Dict или кайнд * -> (Tag, *), где data Tag = C0 | C1
Alexander
а не потому, что надо
Alexander
с TH можно, а так нельзя
Alexander
ну или с многобукаф тоже можно, хочу без многабукаф