Replies (67)

  • @Anatolych, Ммм… Нет.
  • @ndtimofeev, просто мой мозг поаржен питонячим ооп и я не умею в что-то типа множественного наследования в фп. А для чего TH вообще тогда?
  • @Anatolych, если это не троллинг, то я думаю, что стоит начать изучать язык постепенно. И задать интересующие вопросы про TH через недельку две.

    Ну или почитай haskell.org
  • @Anatolych, Для чего нужно множественное наследование в ФП?
  • @qnikst, не троллинг, нет. меня больше интересует собственно DRY в сабже. т.е. я не дозрел прописывать частные случаи, хотя печатаю быстро
  • @Anatolych, А ты пробовал пользоваться функциями высшего порядка?
  • @ndtimofeev, чтоб не херачить одно и то же по сто раз, не? ну типа миксины там.
  • @ndtimofeev, я пока только пробовал datatype. вроде так называется.
  • @Anatolych, А как ООП и миксины позволяют не херачить одно и тоже? Как человек, програмирующий на ООП языках последние лет семь, скажу что ООП только увеличивает количество бойлерплейта. Если ты мне покажешь задачу и то как она решается при помощи миксинов, я попробую ответить что-то более конкретное.
  • @ndtimofeev, ну, например, древовидный список объектов с немного разными наборами атрибутов
  • @Anatolych, ну дерево, не древовидный список, конечно.
  • @Anatolych, Очень сильно зависит от того что ты собираешься с ним делать. Но вообще используй словарь.
  • @ndtimofeev, дело в том, что дерево — это вроде как категории товаров. а у категорий есть списки этих товаров с разными атрибутами. т.е. мне в этом случае описывать каждую категорию вручную как data?
  • @Anatolych, Приведи мне пример дерева.
  • @ndtimofeev, ну вот категории в market.yandex.ru например. а товары — это списки
  • @Anatolych, TH это метапрограмирования.
  • @rxn, Окай. я в это умею в питоне, например. Метаклассы и все дела. Но я не понимаю во ЧТО эта кухня разворачивается в фп и как это юзать.
  • @Anatolych, Это, по-сути, чуть ли не главная причина зачем мне тот же хацкель — я так же не до конца понимаю во что там все это ООП разворачивается. Т.е. абстракции мне нравятся, но хочется странного.
  • @Anatolych, Так. Давай с другой стороны. Если ты покажешь мне как ты планируешь это рисовать на миксинах, я пойму что ты хочешь сделать.
  • @ndtimofeev, Ну примерно так: общие атрибуты в начале дерева — и по веткам приписываем частные. и их значения распределяем по спискам.
  • @Anatolych, Код.
  • @ndtimofeev, пока тольк на питоне
  • @Anatolych, Давай на питоне. Я могу читать питон.
  • @ndtimofeev, как тут код оформляют, для нубов?
  • @Anatolych, Дают ссылка на внешний кодохостинг.
  • @Anatolych, в комментах никак — если а если пост пишешь то *code в качестве тэга/
  • @ndtimofeev, hstore = это типа Json поле в постгресе
  • @Anatolych, Метакласс это не то. TH разворачивается просто в код.

    Вот простой пример.
    makePlusN n = [| \ x -> x + $n |]

    plusThree = $(makePlusN 3) после прохода TH превращается в plustThree = \ x -> x + 3 и дальше передается в компилятор.
  • @rkit, ну вот я хочу это развидеть теперь, на самом деле. Хотя и понимаю, что никакого метапрограммирования на самом деле нет, а есть кодогенерация.
  • @ndtimofeev, ну самое интересное я не выложил, конечно, но смысл в том, что этот json пополняется в товаре от ветки дерева. кумулятивно.
  • @Anatolych, Что мешает тебе просто держать в узлах дерева JSON?
  • @ndtimofeev, ну оно так и есть сейчас
  • @Anatolych, То есть ты хочешь data Tree = Node Aeson [Tree] ?\
  • @Anatolych, Как нет? Куда делось?
  • @ndtimofeev, ну это я понимаю, но хочется чтоб с атрибутов и фильтры делать. т.е. не просто Aeson, а набор параметров (типов)
  • @Anatolych, Эмм… Посмотри в сторону persistent.
  • @ndtimofeev, ну. это в моем случае это постгрес и я смотрел в туда, да. я просто не догоняю в полиморфик, наверное. в целом.
  • @Anatolych, Твоя задача прекрасна описывается деревом самого Aeson. Достаточно просто написать фильтр объектов по параметрам и успокоиться. Я правда не понимаю для чего ты это пытаешься сделать так сложно.
  • @ndtimofeev, Мне кажется, тут дело в уровне моего владения хацкелем. Потому что на уровне питона и sql это сделано весьма доходчиво для меня.
  • @rkit, окай. а расскажите мне про отличие метапрограммирования от кодогенерации, пожалуйста?
  • @Anatolych, Кодогенерацией занимается код. А метапрограммированием программист, который этот код пишет.
  • @rkit, Ну вот я в питоне даже не оперирую именами переменных при этом (makePlusN) — как мне сделать так же в хацкеле?
  • @Anatolych, Зачем?
  • @rkit, ну вот мне иногда сугубо поебать сколько там сущностей типа "А", но иногда мне важно что эта сущность "B" является подмножеством "А" — и то я это узнаю по ее поведению, а не по паспорту. И тогда идет проверка документов.
  • @Anatolych, Причем тут неиспользование имен переменных?
  • @rkit, Потому что мне не важно до какого-то момента, например?
  • @Anatolych, не понял
  • @Anatolych, Вот к сущности "B" ты как обращаешься, если не по имени переменной?
  • @rkit, Тут все идет от моей лени. Я описываю поведение для объектов типа А. Но у А есть множество потомков (с тем же набором хар-к) типа Б и С, которые от А незначительно отличаются. и так целое дерево. Так вот — я начинаю описывать это дерево откуда? — правильно, от А. И дальше обрабатываю частные случаю — кумулятивно. Но тут вся беда в том, что это неправильный подход в среде ФП! (я надесь, что дело в мне — это поправимо, хотя бы)
  • @rkit, в том же питоне я перебираю все сущности без спрашивания имени-фамилии.
  • @Anatolych, Перебор это что, цикл?
  • @rkit, ну да.
  • @Anatolych, А цикл переменные использует? Ну типа, for (i in сущности) ?
  • @rkit, конечно, но они инициируются при переборе
  • @Anatolych, Ну а чего ты мне заливаешь тогда — непонятно.
  • @rkit, ничего. я тебе про то, что они немного разные. и мне никуда не впилось каждый конкретный случай описывать через data
  • @Anatolych, я в питоне даже не оперирую именами переменных
  • @rkit, ой не туда ты зацепился, не туда.
  • @Anatolych, Ты именно этого попросил.
  • @rkit, нетъ. я ж просил как мне не описывать по 100 раз на дню то, что описывают человеки в базу данных, йамл или джейсон. но при этом контроллить хваленый статик тайпинг.
  • @Anatolych, Ну вот я в питоне даже не оперирую именами переменных при этом (makePlusN) — как мне сделать так же в хацкеле?Где тут слова "база данных", "джейсон", "тайпинг"?
  • @Anatolych, Это совсем другая ветка. Как этот код читать я понятия не имею.
  • @rkit, да без проблем. никаких претензий. но все-таки мне интересно решение данной херни на фп, с учетом внешней rdbms
  • @Anatolych, Держать в узлах словари атрибутов, для доступа написать линзы. все равно никакого типизирования отдельных ветвей по сути нет, это динамически изменяемые словари. более того, если весь процессинг сводится к отображению на фронтенде и CRUD, то может промежуточное представление вообще не нужно? Ну, т.е тупо написать код, который будет генерить json-овое дерево и пробрасывать на фронтенд. Если планируется обработка в самом хаскелле и нужны генерируемые из базы типы, то только TH. Но судя по всему, это не нужно.