@polecat кто забыл? в каком треде?
p.s.: я линзами пользуюсь, кстати, причем именно вот тем вот makeFields. Но тут, скорее, все же, вопрос в том, что нужен-таки тип свой под каждую задачу.
@kb это обобщено для кучи полей, для одного без "типофамилий" будет и сильно проще. Обычно в таких случаях делают так: data MultiObj = O1 A | O2 B .... Но в этом варианте без линз и тайп классов будет печально, т.к. аксессоры к типам A, B будут в одном неймспейсе. Сделать безопасно с т.з. типов ты врятли сможешь, т.к. адт не скрывает в типе информацию о текущем конструкторе.
@qnikst вообще ты ж был в аудитории, где Андрес рассказывал про программирование на х-ле на зурихаке? Третий его совет о проектировании данных и декомпозиции по адт как раз сюда.
@qnikst ты меня с кем-то путаешь)) на зурихаке я не был, к сожалению.
ну, по ссылке есть ссылка где я предложил решение, в общем-то https://www.fpcomplete.com/user/k_bx/playing-with-datakinds (последний вариант)
Меня интересует вопрос в целом как поступать в будущем. Думаю, что стоило просто для каждой таски свой тип, и потом нагенерировать инстансов (у нас и так темплейт хаскелем генерится всякое там для них). То есть изначально было неправильным решение в ADT пихать все таски, наверное.
@kb руками ты или видишь что функция не тотальная и переделываешь апи или делаешь тотальную (возвращая мейби) или пишешь документацию. А вот вариант (может у тебя также) http://bpaste.net/show/6c21bfb03e88
@qnikst А вообще, наверное, вот это и будет самый тупой и оптимальный способ https://bpaste.net/show/807060adfeac
Т.к. вообще ни одной причины держать все джобы в одном типе не вижу пока что.
@kb я не знаю твоей задачи, поэтому отвечаю на вопрос как сделать X без окружения :). Текущий же вариант становится весел когда тебе нужно получить в ответ какую либо job, тогда ты или руками делаешь под них sum-type, и возвращаешься к тому, что было, или заворачиваешь это в екзестенциальный тип. Т.е. именно это причина для засовывания джобов в один тип.
@qnikst дык, тайпкласса для этого должно хватить `foo :: (JobDescription j) => j`.
Задачи пока я и сам не знаю, есть куча кода вида продюсер-консюмер, я получил креш в рантайме от подобного доступа к полю и больше не хочу :) так что задача вполне ясная
@kb не хватит тайпкласса если ты разные даты в одном объекте будешь иметь, напр. Chan Jobs. Нужны existentials. А про задачу - ну не знаю.. Неправильно апи спроектировал :) тут на жуйке drChaos про подобное обновление апи писал и спрашивал как обновлять
@qnikst Не понял. Можно про дату поподробнее пример?
Апи не я проектировал :) я пытаюсь его разгрести потихоньку. Кстати, в планах вынести в отдельную либу, т.к. в хаскеле ничего годного не нашёл.
@kb хочешь разгребу за рейтинг на одексе? :) про дату, когда у тебя все в одном адт ты можешь сделать MVar адт, и передавать там любой из конструкторов, если у тебя разные data, то ты так делать не можешь
@qnikst Та мне не проблема разгрести, спасибо :) Но если вдруг будем кого нанимать -- обращусь, а то у нас две тех что были отпали как-то постепенно, так что вполне вероятно.
@kb гут. у меня просто может скоро проект начаться, а может и не начаться, начальник темнит что-то (хотя в общем-то от него там мало чего зависит). Если не начнётся в течении разумного времени, то я серьёзно начну задумываться о поиске других вариантов. А если начнётся то я напишу, надо ж будет похвастаться.
@qnikst Ок, пиши, т.к. я реально боюсь что проект сейчас исключительно на мне живёт, надо со временем как-то начинать в сторону кого-то еще клонить американцев наших.