Нурлан
ой нет, вижу. тут я нерпав
Нурлан
со строкой 151 разобрался?
Нурлан
👍
blkmrkt
интересно, мне hlint предлагает упростить (id (t::FriendTask)) до (t :: FriendTask)
Нурлан
попробуй!
blkmrkt
это наверное потому что в нем одно лишь поле id, и show t эквивалентен show id?
Нурлан
а что ты пишешь? Это что будет?
blkmrkt
г-ди, собралось! пушка!
blkmrkt
а что ты пишешь? Это что будет?
кравлер данных для вконтакта
blkmrkt
а что ты пишешь? Это что будет?
я в принципе все написал и работало нормально с одним типом объектов из апи, потом обнаружил что в GHC 8 есть DuplicateRecordFields и вроде как можно в одном модуле определять дубликаты. Пердолился с переустановкой stack/ghc/ghc-mod/ide, и вот застрял на том как обратиться к этим дублированным полям типов. Оказалось что не хватало $ в printf 😂
blkmrkt
осталось еще CircleCI настроить чтоб бинарник из main автоматом как-то пушился на все машины, и будет ништяк
blkmrkt
ну сорри, я просто взволнован
Нурлан
знакомо =)
blkmrkt
мне очень нравится то чувство при работе с хаскелем, когда можно писать код несколько часов и, если нет ошибок, знать что оно соберется и будет работать
Нурлан
да, я тоже очень много времени экономлю с такой системой
Нурлан
не приходится постоянно перепроверять и тестить на всем подряд
blkmrkt
угу. Слегка напрягает лишь непрозрачность компилятора, я не понимаю как он работает. Особенно STM и все что связано с конкурренси/параллелизмом. Вот например я воспользовался либой amqp, и вышло так что 50 параллельных воркеров грузили два ксеона Е5-4650 на 100%, и сообщения доставлялись внезапными очередями. Лишь потом случайно нашел крупными буквами в доках заметку о том, что реюзать один канал в разных тредах нельзя.
blkmrkt
и интересно, все равно собираешь ли ты бинарник с -threaded или нет, ни разу не видел чтоб процессы форкались средством ОС. Нужно наверное еще читать и читать.
Нурлан
я с такими задачами не работал
Нурлан
blkmrkt
а какие задачи вы на хаскеле решаете?
Нурлан
Да я собственно не программист, хочу на хаскеле нейронку поднять и датасаинс
Нурлан
Если есть желание могу пригласить на добровольно безвозмездных началах с кластером
blkmrkt
ох я кроме как в универе не занимался этим
Нурлан
Аналогично
blkmrkt
кстати, не знаешь готовых БД для high-dimensional data? конкретно интересует phash и подобное, а именно быстрый ретрив N записей по дистанции
Нурлан
Не-а
blkmrkt
у phash есть простой бинарник в комплекте, но он CLI и просто proof of concept
Нурлан
И питон тоже будет, но магия исчезает
_______bx
@blkmrkt ну так а как у вас задача решилась с id?
blkmrkt
@blkmrkt ну так а как у вас задача решилась с id?
Добавил скобочек и заработало
blkmrkt
printf (id (t::WallTask))
_______bx
как все просто оказалось)
blkmrkt
Да уж. Хорошее наверное средство - добавить скобочек, да добавить/убрать $
_______bx
_______bx
а у меня вот так и не завелось в Main заработало только в таком варе
_______bx
для
_______bx
_______bx
но он не катит
blkmrkt
я бы добавил скобочек 😂 Just (Wt (x :: Wt) (i :: Wt)) -> ...
_______bx
нет я про ваш пример)
_______bx
тот что я показал работает
_______bx
но имеет значение порядок полей
blkmrkt
ааа
blkmrkt
вот такой код у меня вышел
blkmrkt
hlint предлагает только упростить в то что не компилируется потом
Нурлан
hlint предлагает только упростить в то что не компилируется потом
он предлагает по тому, что принимает id за стандартную функцию из prelude
_______bx
Ambiguous occurrence ‘id’ It could refer to either ‘Prelude.id’, imported from ‘Prelude’ at source_file.hs:1:1 (and originally defined in ‘GHC.Base’) or ‘Main.id’, defined at source_file.hs:5:25
_______bx
да
blkmrkt
а я ж импортировал Prelude hiding (id)
_______bx
ааа
_______bx
понятно
_______bx
а если не прятать? никак явно не указать что поле из WallTask?
blkmrkt
вот такой код у меня вышел
так вот же самый явный импорт
blkmrkt
нужно лишь явно инферить тип t, вот это контринтуитивно. На форумах расписано почему, но я еще не в состоянии понять
_______bx
_______bx
так работает
blkmrkt
угу я так сперва и делал, пока в одном модуле не определил тип со вторым id
_______bx
нужно лишь явно инферить тип t, вот это контринтуитивно. На форумах расписано почему, но я еще не в состоянии понять
почему? там выше у вас task = ... :: WallTask тоесть тип WT известен должен быть. Или нет?
blkmrkt
почему? там выше у вас task = ... :: WallTask тоесть тип WT известен должен быть. Или нет?
угу вот этого я так и не понял, почему он не инферит очевидное. Тут вот разговор как раз про это: https://www.reddit.com/r/haskell/comments/4vejt3/unable_to_infer_type_when_using/ Насколько я понял, DuplicateRecordFields это часть более крупного функционала, который не реализован полностью, и делает DuplicateRecordFields ровно то о чем она говорит - позволяет определять дубликаты полей в одном модуле, но ничего про обращение к этим полям из того же модуля не сказано
Нурлан
почему? там выше у вас task = ... :: WallTask тоесть тип WT известен должен быть. Или нет?
Скорее всего не расписаны сигнатуры ранних функций, поэтому возникает неопределённость для механизма вывода типов. Поскольку сперва выводится тип, то становится непонятно какой id надо было вызывать.
Misha
а вот вопрос @qnikst в первую очередь: а насколько вот это https://github.com/qnikst/2pc-haskell закончено и "production ready"? И насколько оно подходит для сценария "хочу обновить STM-стейт на двух узлах, а кроме того, закоммитить изменение в постгрес"?
Alexander
Интерфейс может немного наркоманский, ну и в двухфазном коммите сложнее с откатом чем в скажем паксос
Alexander
Если хочешь я могу еще раз посмотреть как там и что
Misha
пока не нужно, спасибо, я распределенную часть оставил на десерт, к тому же это pet project, на него времени много нет. Но если пойму, что оно хорошо подходит под задачу, то буду еще спрашивать.
Alexander
Ok
Anonymous
Anonymous
Программирование на Haskell — ты начинаешь искать черного кота в темной комнате, тут понимаешь что можно бы сделать более общий алгоритм и искать любое черное животное. Животное любого цвета. В любой комнате. В комнотоиде. В любом метрическом пространстве. В итоге бросаешь это дело.
Anonymous
можно подумать, искать черного кота в темной комнате это хорошая идея