@haskellru

Страница 426 из 1551
Alexander
20.09.2017
16:19:33
если у тебя есть какая-то ошибка любая, то компилятор не может вывести m

как следствие он не может ресолвить StM m ()

Yuriy
20.09.2017
16:20:11
дык функция StM в одну сторону определена

Alexander
20.09.2017
16:20:11
но вместо того, чтобы написать ошибку внутри, он пишет эту

Google
Alexander
20.09.2017
16:20:23
т.е. ошибка совершенно в другом месте

Yuriy
20.09.2017
16:20:37
у нас пока нет Пролога на уровне типов

Alexander
20.09.2017
16:20:51
тут m определена и известна

и StM m () ~ ()

Yuriy
20.09.2017
16:21:29
ого! есть гист?

Alexander
20.09.2017
16:21:59
нету минимального кейса

а резать проект очень долго

в чуть-чуть более простом случае рядом все ок

есть 2 возможные причины:

Yuriy
20.09.2017
16:22:34
в твоё описание не верится

Leonid
20.09.2017
16:22:36
В серванте нет ничего сложного

Alexander
20.09.2017
16:22:45
1. я туплю и не вижу *другую* ошибку типов

2. компилятор дурак

Google
Yuriy
20.09.2017
16:23:15
тут каким-то образом информация об m не доехала

Alexander
20.09.2017
16:23:31
даже если добавить Proxy m не спасает

control $ \unlift -> do serv <- join $ atomically $ asum [ readTVar lock >>= check >> pure (async $ unlift $ act ws) убираем async и все ок

Yuriy
20.09.2017
16:24:34
без примера не могу помочь

Alexander
20.09.2017
16:24:49
а с примером сможешь?

Yuriy
20.09.2017
16:25:00
смогу попытаться

Alexander
20.09.2017
16:25:07
я не знаю сколько делать минимальный пример

т.к. в соседнем месте такой же по структуре код работает

Yuriy
20.09.2017
16:27:05
у меня 100% случаев «ну почему же компилятор не выводит!?» заканчивались «хм, действительно, здесь нельзя вывести»

Alexander
20.09.2017
16:31:07
serv <- asyncM $ control $ \unlift -> join $ atomically $ asum [ readTVar lock >>= check >> pure (unlift $ act ws) так работает asyncM :: MonadFork m => m a -> m (Async a)

а не, тут все ок

у act тип -> m a был, а должен был быть -> m ()

что не следовало из текста ошибки

о чем и ругань

вот 2 примера выше, могу типы написать это что-то рядом с минимальным примером, если хочешь вечером могу компиляющееся сделать

@cblp_su я вечером таки попробую сделать мимимальный пример

Denis
20.09.2017
16:47:08
кто-то работал с https://hackage.haskell.org/package/compdata ? чем это лучше чем recursion-schemes?

Yuriy
20.09.2017
16:47:29
я попробую эти примеры поисследовать

Alexander
20.09.2017
16:47:37
но повторюсь что rant о том, что если у тебя a :: () -> () -> m () и код control $ \unlift -> unlift $ a ()

то тебе скажут не о том, что a применён к недостаточному числу агрументов (ошибка типов)

Google
Alexander
20.09.2017
16:48:14
а о том, что StM m () не равно ()

это в общем-то понятно почему так, но очень неудобно

этот пример отличался от обычного, тем, что ошибку типов другую я найти не смог

о, в катипе мой патч уже приняли можно продолжать портирование на винду

о вспомнил, что мне в идрисе очень нравилось, чего тут не хватает

возможности всяких разных списков через [,,] делать

т.е. какой-нить HList в haskell так не написать

Alexander
20.09.2017
17:39:47
[a,b,c] :: HList [Int,String, Double] я там могу сделать

мне конечно это мешало, т.к. он тупил и не хотел выбирать тип сам если векторы заимпорчены

всякие применения applicative можно без idiom brackets или синтаксического оверхеда на <$> <*> писать

Vyacheslav
20.09.2017
17:46:13
bind оператор не прибит гвоздями к монадам

точнее так, do нотация не прибита гвоздями к монадам

Denis
20.09.2017
17:47:43
RebindableSyntax тоже вроде в haskell позволяет это делать

Alexander
20.09.2017
17:48:12
Rebindable для списков вроде же не работает

Vasiliy
20.09.2017
17:49:32
пришёл домой и пабырику накидал тот же кодец, что и на работе, на vinyl

оказалось, что vinyl совсем не страшный, даже наоборот

я вот про это, если что

https://pastebin.com/EhXR9Scd

Alexander
20.09.2017
17:51:05
vinyl очень приятный

Google
Alexander
20.09.2017
17:51:17
я очень сильно удивился когда узнал что он более общий чем HList

а не наоборот

Vasiliy
20.09.2017
17:53:35
там с туториалом проблемы - сходу TH, линзы, сиглтоны, дальше вникать как-то сложно

а сегодня я кое-как не без вашей помощи дошёл до определения Rec, и оказалось, что всё очень даже доступно

Alexander
20.09.2017
18:10:07
о, там tutorial появился?

прикольно я его понял когда статью по Generic Programming Лё читал

Yuriy
20.09.2017
19:09:27
Rebindable для списков вроде же не работает
есть OverloadedLists, который немного смягчает синтаксис списков, но HList он не может

Alexander
20.09.2017
19:09:55
я знаю, но это совсем не то

замена [...] на fromList [...]

Yuriy
20.09.2017
19:11:15
да, это не решение, а шажок в сторону

но можно ведь кортежами записывать HList

Vasiliy
20.09.2017
19:13:37
кортежи в идрисе, кстати, тоже подсахарённые

(a, b, x) = (a, (b, x))

Alexander
20.09.2017
19:14:57
Vasiliy я сделал функцию в твоём подходе

@cblp_su можно vector-fixed-hetero конечно

если бы как в идрисе было, было бы нормално

сейчас запосчу решение

fs1 :: HList ts -> HList (Map A ts) -> HList (Map M ts) fs1 (_ :&: z) (y :&: ys) = (M y) :&: (fs1 z ys) fs1 HNil HNil = HNil вместо первого HList можно свою проксю запилить по которой матчить можно или сигнетоны

можно undefined-ы хранить

но vinyl лучше

Google
Vasiliy
20.09.2017
19:21:54
собственно, как я и подозревал, нужен какой-то объект, который будет подтверждать ts, в смысле, :&: он или HNil

Alexander
20.09.2017
19:22:06
ну можно typeclass

тогда Proxy ts будет достаточно

proxy ts

но инфа о ts нужна

жалко typefamiliesdependencies недопилены

можно бы было в Map f a :: b | f a -> b сделать было бы счастье

Vasiliy
20.09.2017
19:23:33
а, то есть, сделать класс, инстансами которого будут Proxy '[] и Proxy (x ': xs) ?

Alexander
20.09.2017
19:24:18
да

стаднартный Олеггинг

Vasiliy
20.09.2017
19:24:37
ага, я примерно понял

впрочем, я сейчас сидя дома на vinyl сделал то, что полтора дня делал на работе руками

Leonid
20.09.2017
19:26:21
что-то у меня этот ваш телеграм сам пишет в чат, прямо из гибернации

Alexander
20.09.2017
19:27:05
это потому что ты точно знаешь все скандалы-интриги-расследования про него

Vasiliy
20.09.2017
19:27:06
жутковатые сигнатуры получаются: event :: t ∈ m => (forall f. Lens' (Rec f m) (f t)) -> Dir -> MEvent t -> Sequence m ()

но пользователю иметь дело только с Sequence '[A, B] a, так что супер

Dmitry
20.09.2017
19:46:11
Vasiliy: а где ты все это применяешь вообще?

Vasiliy
20.09.2017
19:48:04
тебя интересует конкретный момент со списком типов?

или задача в целом?

Dmitry
20.09.2017
19:50:20
Задача

kana
20.09.2017
19:51:25
В сервант-сервере каждый комбинатор QueryParam/QueryFlag/QueryParams заново парсит и строит мапу квери-паромов

Dmitry
20.09.2017
19:51:32
Меня впринципе интересует, где можно применять хаскель и весь этот теоркат

Страница 426 из 1551