blkmrkt
Нурлан
ой нет, вижу. тут я нерпав
Нурлан
со строкой 151 разобрался?
blkmrkt
Нурлан
👍
blkmrkt
интересно, мне hlint предлагает упростить (id (t::FriendTask)) до (t :: FriendTask)
Нурлан
попробуй!
blkmrkt
это наверное потому что в нем одно лишь поле id, и show t эквивалентен show id?
Нурлан
Нурлан
а что ты пишешь? Это что будет?
blkmrkt
г-ди, собралось! пушка!
blkmrkt
_______bx
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 записей по дистанции
Нурлан
Не-а
_______bx
blkmrkt
у phash есть простой бинарник в комплекте, но он CLI и просто proof of concept
Нурлан
И питон тоже будет, но магия исчезает
blkmrkt
_______bx
@blkmrkt ну так а как у вас задача решилась с id?
blkmrkt
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 предлагает только упростить в то что не компилируется потом
_______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
нужно лишь явно инферить тип t, вот это контринтуитивно. На форумах расписано почему, но я еще не в состоянии понять
_______bx
_______bx
так работает
blkmrkt
угу я так сперва и делал, пока в одном модуле не определил тип со вторым id
_______bx
blkmrkt
почему? там выше у вас task = ... :: WallTask
тоесть тип WT известен должен быть. Или нет?
угу вот этого я так и не понял, почему он не инферит очевидное. Тут вот разговор как раз про это: https://www.reddit.com/r/haskell/comments/4vejt3/unable_to_infer_type_when_using/
Насколько я понял, DuplicateRecordFields это часть более крупного функционала, который не реализован полностью, и делает DuplicateRecordFields ровно то о чем она говорит - позволяет определять дубликаты полей в одном модуле, но ничего про обращение к этим полям из того же модуля не сказано
Misha
а вот вопрос @qnikst в первую очередь: а насколько вот это https://github.com/qnikst/2pc-haskell закончено и "production ready"? И насколько оно подходит для сценария "хочу обновить STM-стейт на двух узлах, а кроме того, закоммитить изменение в постгрес"?
Alexander
Alexander
Интерфейс может немного наркоманский, ну и в двухфазном коммите сложнее с откатом чем в скажем паксос
Alexander
Если хочешь я могу еще раз посмотреть как там и что
Misha
пока не нужно, спасибо, я распределенную часть оставил на десерт, к тому же это pet project, на него времени много нет. Но если пойму, что оно хорошо подходит под задачу, то буду еще спрашивать.
Alexander
Ok
Anonymous
Anonymous
Программирование на Haskell — ты начинаешь искать черного кота в темной комнате, тут понимаешь что можно бы сделать более общий алгоритм и искать любое черное животное. Животное любого цвета. В любой комнате. В комнотоиде. В любом метрическом пространстве. В итоге бросаешь это дело.
Нурлан
Anonymous
можно подумать, искать черного кота в темной комнате это хорошая идея
Denis