Отдал бы и ползарплаты! Войти !bnw Сегодня Клубы
Старался, короче, писал свой тупой вопрос, а они молчат :( http://stackoverflow.com/questions/26439597/type-safe-named-fields-in-haskell-adts
#6M23U0 / @kb / 3682 дня назад

@polecat кто забыл? в каком треде? p.s.: я линзами пользуюсь, кстати, причем именно вот тем вот makeFields. Но тут, скорее, все же, вопрос в том, что нужен-таки тип свой под каждую задачу.
#6M23U0/W87 / @kb --> #6M23U0/C3V / 3682 дня назад
или выставляй safe версию (написанную руками) или гадт (но это тоже руками)
#6M23U0/MJK / @qnikst / 3682 дня назад
@qnikst http://bpaste.net/show/8ac4283659a2 например, хотя это и оверкил
#6M23U0/W90 / @qnikst --> #6M23U0/MJK / 3682 дня назад
@qnikst нехило. пожалуй, слишком хардкорно, но в целом понравилось.
#6M23U0/8T3 / @kb --> #6M23U0/W90 / 3682 дня назад
@kb это обобщено для кучи полей, для одного без "типофамилий" будет и сильно проще. Обычно в таких случаях делают так: data MultiObj = O1 A | O2 B .... Но в этом варианте без линз и тайп классов будет печально, т.к. аксессоры к типам A, B будут в одном неймспейсе. Сделать безопасно с т.з. типов ты врятли сможешь, т.к. адт не скрывает в типе информацию о текущем конструкторе.
#6M23U0/8Z7 / @qnikst --> #6M23U0/8T3 / 3682 дня назад
@qnikst вообще ты ж был в аудитории, где Андрес рассказывал про программирование на х-ле на зурихаке? Третий его совет о проектировании данных и декомпозиции по адт как раз сюда.
#6M23U0/KLC / @qnikst --> #6M23U0/8Z7 / 3682 дня назад
@qnikst я правда там не был, так что может он и сменил подход, но врятли.
#6M23U0/8MA / @qnikst --> #6M23U0/KLC / 3682 дня назад
@qnikst ты меня с кем-то путаешь)) на зурихаке я не был, к сожалению. ну, по ссылке есть ссылка где я предложил решение, в общем-то https://www.fpcomplete.com/user/k_bx/playing-with-datakinds (последний вариант) Меня интересует вопрос в целом как поступать в будущем. Думаю, что стоило просто для каждой таски свой тип, и потом нагенерировать инстансов (у нас и так темплейт хаскелем генерится всякое там для них). То есть изначально было неправильным решение в ADT пихать все таски, наверное.
#6M23U0/AWO / @kb --> #6M23U0/KLC / 3682 дня назад
@kb Ну и вообще удивительно, что хаскель по-умолчанию не пытается что-то с этим сделать. Это ж очень и очень небезопасно, подобные вещи.
#6M23U0/GEM / @kb --> #6M23U0/AWO / 3682 дня назад
@kb возможно путаю. Кстати gadt и классы объединить можно, будет вообще отлично, щас набросаю
#6M23U0/F7U / @qnikst --> #6M23U0/AWO / 3682 дня назад
@kb автогенерируемые аксессоры - зло, не стоит ими пользоваться там, где это опасно.
#6M23U0/S8I / @qnikst --> #6M23U0/GEM / 3682 дня назад
@qnikst Дык, я бы сказал, что даже не автогенерируемые -- зло, т.к. легко ту же самую ошибку допустить (типы не помогут).
#6M23U0/JNW / @kb --> #6M23U0/S8I / 3682 дня назад
@kb руками ты или видишь что функция не тотальная и переделываешь апи или делаешь тотальную (возвращая мейби) или пишешь документацию. А вот вариант (может у тебя также) http://bpaste.net/show/6c21bfb03e88
#6M23U0/LKG / @qnikst --> #6M23U0/JNW / 3682 дня назад
@qnikst Именно так, да. Ну, собственно, ещё для сравнения надо сделать на старых добрых разных типах вместо ADT/GADT.
#6M23U0/YNC / @kb --> #6M23U0/LKG / 3682 дня назад
@kb это как boolean blindness, тогда в типах не выражено true или false, в результате ветки можно перепутать ибо не тайпчекается
#6M23U0/EIH / @qnikst --> #6M23U0/YNC / 3682 дня назад
@qnikst А вообще, наверное, вот это и будет самый тупой и оптимальный способ https://bpaste.net/show/807060adfeac Т.к. вообще ни одной причины держать все джобы в одном типе не вижу пока что.
#6M23U0/SRK / @kb --> #6M23U0/EIH / 3682 дня назад
@kb я не знаю твоей задачи, поэтому отвечаю на вопрос как сделать X без окружения :). Текущий же вариант становится весел когда тебе нужно получить в ответ какую либо job, тогда ты или руками делаешь под них sum-type, и возвращаешься к тому, что было, или заворачиваешь это в екзестенциальный тип. Т.е. именно это причина для засовывания джобов в один тип.
#6M23U0/GBN / @qnikst --> #6M23U0/SRK / 3682 дня назад
@qnikst дык, тайпкласса для этого должно хватить `foo :: (JobDescription j) => j`. Задачи пока я и сам не знаю, есть куча кода вида продюсер-консюмер, я получил креш в рантайме от подобного доступа к полю и больше не хочу :) так что задача вполне ясная
#6M23U0/6CP / @kb --> #6M23U0/GBN / 3682 дня назад
@kb не хватит тайпкласса если ты разные даты в одном объекте будешь иметь, напр. Chan Jobs. Нужны existentials. А про задачу - ну не знаю.. Неправильно апи спроектировал :) тут на жуйке drChaos про подобное обновление апи писал и спрашивал как обновлять
#6M23U0/V6D / @qnikst --> #6M23U0/6CP / 3682 дня назад
@qnikst Не понял. Можно про дату поподробнее пример? Апи не я проектировал :) я пытаюсь его разгрести потихоньку. Кстати, в планах вынести в отдельную либу, т.к. в хаскеле ничего годного не нашёл.
#6M23U0/R9D / @kb --> #6M23U0/V6D / 3682 дня назад
@kb хочешь разгребу за рейтинг на одексе? :) про дату, когда у тебя все в одном адт ты можешь сделать MVar адт, и передавать там любой из конструкторов, если у тебя разные data, то ты так делать не можешь
#6M23U0/NY5 / @qnikst --> #6M23U0/R9D / 3682 дня назад
@qnikst Та мне не проблема разгрести, спасибо :) Но если вдруг будем кого нанимать -- обращусь, а то у нас две тех что были отпали как-то постепенно, так что вполне вероятно.
#6M23U0/88U / @kb --> #6M23U0/NY5 / 3681 день назад
@kb s/две/двое/
#6M23U0/ED0 / @kb --> #6M23U0/88U / 3681 день назад
@kb гут. у меня просто может скоро проект начаться, а может и не начаться, начальник темнит что-то (хотя в общем-то от него там мало чего зависит). Если не начнётся в течении разумного времени, то я серьёзно начну задумываться о поиске других вариантов. А если начнётся то я напишу, надо ж будет похвастаться.
#6M23U0/M5P / @qnikst --> #6M23U0/88U / 3681 день назад
@qnikst Ок, пиши, т.к. я реально боюсь что проект сейчас исключительно на мне живёт, надо со временем как-то начинать в сторону кого-то еще клонить американцев наших.
#6M23U0/DBJ / @kb --> #6M23U0/M5P / 3681 день назад
ipv6 ready BnW для ведрофона BnW на Реформале Викивач Котятки

Цоперайт © 2010-2016 @stiletto.