
Alexander
19.10.2018
19:28:09
да
в общем у AsJSON есть для String/ByteString инстанс
поэтому в ghci дефолтинг срабатывает

Yuriy
19.10.2018
19:28:58
IsString есть и для Value, и для String

Google

Yuriy
19.10.2018
19:29:32
интересно, почему разные IsString не конфликтуют
если дефолтинг не сработает, будет не Nothing, а ошибка компиляции
у тебя именно Value выбирается

Alexander
19.10.2018
19:30:16
а почему они должны
в программе у меня value
т.к. там явно тип написан
в ghci простом тесте было string поэтому все работало

Yuriy
19.10.2018
19:31:07
зачем у тебя явно Value написан, если ты из String _ :: Value не вытащишь key?

Alexander
19.10.2018
19:31:21
ну в программе то у меня Value бегает

Yuriy
19.10.2018
19:32:03
для Value нельзя писать "{\"solution\":[1]}"
можно [aesonQQ| {"solution": [1]} |]

Alexander
19.10.2018
19:32:40
это ghci блин
я просто пытался понять откуда разница, теперь понятно

Google

Yuriy
19.10.2018
19:33:42
а как посмотреть default rules в ghci?
это ghci блин
а. ты проверил в ghci, всё работало, и ты перенёс строчку в файл?

Alexander
19.10.2018
19:34:32
нет
у меня был файл, в нём почему-то не работает
я включил ghci и стал разбираться, вижу что в функции возвращается Nothing
а примерно в том же примере в ghci Just
сначала разницы не видел почему так
теперь вижу
и оказывается все работало верно
но хоть тесты написал
хах
теперь с русскими буковами какая-то фигня

Terminator
20.10.2018
04:01:49
@petrodems будет жить. Поприветствуем!

Дмитрий
20.10.2018
06:11:11
Скорее всего нет, но всё таки, может есть ли какой-то аналог let конструкций, который можно применить на уровне типов?

Yuriy
20.10.2018
06:13:13
можно ввести синоним типа в модуле, но не экспортировать его

Дмитрий
20.10.2018
06:15:25
Мне нужно что-то такое по функционалу:
type family D a b where
D a b = let x = P a b in (x, x)

Yuriy
20.10.2018
06:16:53
type Pair x = (x, x)
D a b = Pair (P a b)

Дмитрий
20.10.2018
06:16:56
А синоним типа на уровне модуля... нужно поробовать, что из этого можно вытащить.
Угу, благодарю, но выглядит как костыль :(

Yuriy
20.10.2018
06:20:52
типы не вычисляются, как значения, они матчатся в хвост и в гриву постоянно, поэтому не надо их переусложнять

Google

Дмитрий
20.10.2018
06:22:33
А если я хочу на них построить нормальные вычисления? Скажем меня интересуют не числа чёрча, а позиционные, чтобы можно было считать не за n от модуля, а за log от него же.

Yuriy
20.10.2018
06:27:10
тогда пользуйтесь этими "костылями" или языками с более продвинутыми типами
для кого-то и let может выглядеть как костыль, ведь это всего лишь сахар над абстракцией и аппликацией

Oleg
20.10.2018
06:30:05
Ну так о том и речь, что нет локальной абстракции у типов

Дмитрий
20.10.2018
06:32:07
У меня только сложение и умножение. А с отрицательными числами что-то не пошло :(
Плюс оно двоичное и задом наперёд.

Yuriy
20.10.2018
06:32:35
по-моему, глобальный синоним типа не выглядит плохо, потому что пользователю твоего типа, скорее всего, захочется заглянуть внутрь

Oleg
20.10.2018
06:34:08
Догадываюсь, что если спуститься с тайпфемелей на какие-то, например, Proxy, уже будет проще с тайп-синонимами

Дмитрий
20.10.2018
06:35:13
А на проксях можно строить функции на типах? Если да, то ссылку в студию ибо я жажду это зачесть.

Oleg
20.10.2018
06:36:09
Да мне не нужно верить в таких вопросах в отношении хашкеля.
Я пока фантазирую прост. Может быть и нельзя

Дмитрий
20.10.2018
06:37:11
А я и не верю…

Alexander
20.10.2018
06:43:25
функторы опять набирают
интересно там опять требования как на 10 академиков

Yuriy
20.10.2018
06:47:03

Alexander
20.10.2018
06:51:47
в твиттере глиминг ссылку на их сайт ночью опять постил http://www.functor.se/careers/openings/
с тем что набирают

Pineapple
20.10.2018
07:03:35

Abbath
20.10.2018
11:07:04
Так посоны, помню тут давали мне билдскрипт до тревиса

Google

Abbath
20.10.2018
11:07:10
Можете повторить?
Уже не надо
cabal: The program 'ghc' version >=7.0.1 is required but it could not be
found.
И снова здравствуйте

Alexander
20.10.2018
11:54:02
у hvr на гитхабе репа

Terminator
20.10.2018
19:56:12
@lightgreen будет жить. Поприветствуем!

Artyom
20.10.2018
19:58:28
@voidlizard Посмотрел https://www.youtube.com/watch?v=Ew8gl6WF9to&feature=youtu.be&t=2401 — как у вас дела с миграциями? Вы научились их нормально делать без того, чтобы все старые типы хранить в коде и версионировать все явно?
У меня просто в очередной раз мучения на тему “как нам обустроить базу данных в хаскеле”

Dmitry
20.10.2018
20:00:14
ну в целом всё плохо
просто в каждом подходе по-своему
не именно в хаскелле с базами, а вообще с базами

Alexander
20.10.2018
20:02:00
миграции плохо у всех
могу рассказать как у нас сделано чтобы zerodowntime был
даже в случае не backward compatible миграций
но это ад ещё тот, я не уверен, что в другом проекте я хочу повторять

Artyom
20.10.2018
20:02:48
Да zero downtime даже и не нужен (и производительность не нужна), лишь бы было удобно кодить
У меня сейчас самописный TH для того, чтобы эти миграции генерить, и это тоже что-то неприятное (но safecopy я вообще не хочу, если уж на то пошло, потому что его только из хаскеля можно инспектить)

Alexander
20.10.2018
20:03:28
у нас вручную + версия в табличке
автогенерация ломается на каждый чих
но это делает версии линейными

Google

Alexander
20.10.2018
20:04:10
но, в production они линейные
а локально у нас в nix-shell база пересоздается
и мигрирует куда надо
т.е. nix-shell и там start_db
в другой базе все на основе persistent и его миграций, но это говно
любые нетривиальные миграции он не осиливает
во время разработки (пока реальных юзеров не было) мы раза 4 дропали ту базу
сейчас надо ещё в одном проекте делать миграции и я даж не знаю что делать
с одной стороны список версий и явные миграции это вроде самое разумное
с другой мерж веток изменяющих схему - сериализуется

Victor
20.10.2018
21:15:02

Terminator
21.10.2018
03:46:23
@nikiquark будет жить. Поприветствуем!

Alex
21.10.2018
06:22:59
Колеги, в целях самообразования пытаюсь переписать следующую функцию из do-нотации на операторный лад