Big Bux Chungus
ок
Oleg
т.е дальше ты применяешь условие натуральности и получаешь (f . fmap g ) id
Big Bux Chungus
ну ок, f. fmap g == fmap g. f для любой g это достаточное условие для from . to = id
Oleg
В реальности и достаточное. Лемма Йонеды не просто следует, а эквивалента требованию натуральности
Big Bux Chungus
это практически наверняка следует из законов для fmap и free theorems
Oleg
Натуральность - это дополнительная структура, она не следует из общности полиморфизма. Но удачи попробовать
Big Bux Chungus
хм, ∀ x. (a -> x) -> x ~ a точно следует из free theorems, об этом даже написано в Theorems for free вадлера
Big Bux Chungus
а вот с произвольным функтором не очевидно
Oleg
хм, ∀ x. (a -> x) -> x ~ a точно следует из free theorems, об этом даже написано в Theorems for free вадлера
ты можешь легко сам вывести условие натуральности для полимофорфной функции из (~>) a в Identity. Ну, опуская дно, понятно Для произвольного функтора это уже не всегда верно
Big Bux Chungus
я сохранил этот разговор, позже подумаю. как додумаюсь, напишу.
Oleg
Я тоже засомневался в своём последнем утверждении.
Aleksei (astynax)
Насколько адекватно брать список неких исходных файлов и на основе них делать динамчески правила для Shake? Хочу плясать от исходников, а не от результата, но это противоречит концепции шейка, няп.
Aleksei (astynax)
Так то я обошёлся тем, что сделал таргет с файлом-списком-исходников - экшн делает список файлов и процессит все по одному, а в результате пишет в out список того, что напроцессил.
Aleksei (astynax)
Но такой вариант не позволяет кэшировать результаты сборки
Aleksei (astynax)
Делать всё через forward я не могу, потому как часть собираемого у меня таки собирается "от результата"
Leonid 🦇
Читай файлы вне шейка
Leonid 🦇
Чтение файла сделай топ Фони и из него делай need
Leonid 🦇
Шейк же монадический а не аппликативный
Timofey
Ортогональное этой дискуссии замечание - пишите и выкладывайте гайды, тюториалы и сборники how-to по шейку!
Timofey
А то их в сети раз, два и обчёлся
Timofey
Я как-то делал динамический need/want, там не сильно много магии. Динамические правила ещё не делал =)
Aleksei (astynax)
Сделал диначмеческие правила. Работает.
Aleksei (astynax)
Чёт шейковы copyFile' со товарищи странно работают с временными папками, которые шейк и создаёт
Aleksei (astynax)
Трекать как зависимость файлы во временной папке - такое
Aleksei (astynax)
Ладно хоть можно самлинт прогнать и понять, что лишнее трекаешь
Aleksei (astynax)
Но в итоге всё норм, результат кэшируется, красота!
Timofey
Гист в студию!
Aleksei (astynax)
https://github.com/astynax/racket-daily-art/blob/master/Build.hs
Timofey
Спасибо!
Anonymous
@automationanywhere будет жить. Поприветствуем!
Anonymous
Andrey будет жить. Поприветствуем!
Aleksei (astynax)
https://github.com/astynax/racket-daily-art/blob/master/Build.hs
Что меня раздражает, так это проблемы с OverloadedStrings и Shake - стоит включить, как всё сразу ломается. Поэтому приходится выбирать, либо правила Shake нормальные (без лишних аннотаций), либо T.pack "code" ~> T.pack contents. Так и живу...
Dmitry
@astynax {-# language OverloadedStrings #-} {-# language ExtendedDefaultRules #-}
Dmitry
https://github.com/nh2/command/issues/1
Aleksei (astynax)
Я пробовал. "works, but leaves a warning." как и написали в комментах..
Aleksei (astynax)
Но спасибо за ссылку на ишшуй! Из него я узнал о https://github.com/ndmitchell/shake/issues/74 :)
Aleksei (astynax)
Смогу теперь в IO команды через cmd писать :)
Dmitry
А почему бы и ворнинг не отключить?
Aleksei (astynax)
Ворнинг про warn-type-defaults - полезный. М.б. не в shake-скриптах, конечно :)
Aleksei (astynax)
Смогу теперь в IO команды через cmd писать :)
λ> putStr . fromStdout =<< cmd (Cwd "/tmp") "pwd" /tmp мне нравится!
Dmitrii
Мы в summoner использовали один прикольный трюк, чтобы писать shell-команды прямо набирая названия команд и передавая аргументы, чтобы как можно ближе к оригиналу получалось. Может быть не самое типо-безопасное решение, но читаемость отличная, и для того, чтобы быстро вызвать какие-то команды из shell очень подходит. * https://github.com/kowainik/summoner/blob/4395c5f93c4a94d489c0824f733e9127bfdb48a0/src/Summoner/Project.hs#L108-L117
Aleksei (astynax)
У cmd шейковского самое приятное - перегрузка вывода.
Aleksei (astynax)
А ещё передача параметров, если это необходимо. Вот такая cmd (Cwd "/tmp") ...
Big Bux Chungus
А как называется фолд, когда на каждый шаг мы берём в качестве аргумента текущий зиппер всей структуры данных?
Big Bux Chungus
т.е. в случае со списками, это будет ([a] -> z) -> (z -> Zipper a -> z) -> [a] -> z
Anatolii
а то я что-то не опнял как вы этого добились
Aleksei (astynax)
IsString уж + OverloadedStrings
Anonymous
Sergei будет жить. Поприветствуем!
Anonymous
@ArtyomKhmelyov будет жить. Поприветствуем!
Dmitrii
а ты можешь рассказать как это работает плиз?
@astynax прав. Все благодаря следующему маленькому инстансу: https://github.com/kowainik/summoner/blob/4395c5f93c4a94d489c0824f733e9127bfdb48a0/src/Summoner/Process.hs#L21-L26 Как приятный бонус, благодаря этому инстансу, текущая выполняемая команда заодно печатается в консоль в красивеньком виде.
Михаил
Удалите меня
Михаил
Аааааааа
Михаил
Я прошу
Михаил
Админы
Михаил
!admins
Cheese
Удалите меня
просто выйди из чата
Михаил
Как?
Михаил
Михаил
Давай я тебе доступ дам и ты выйдешь
Denis
свайп по чату
Cheese
«изм.»
Denis
в списке чатов
Михаил
Cheese
странный этот ваш айфон
Cheese
https://apple.stackexchange.com/a/281076
Yura
чат надо переименовать в VIM
Alexander
у haskell и vim есть общие вещи
Alexander
как зайдешь - тяжело выйти назад
Yura
первая доза бесплатно
Andrew
Не удаляйте его, пусть просвещается человек!
Yura
пусть приобщается, с*ка
Alexander
SKI ?
Alexander
базис?
Зигохистоморфный
Alexander
плохая шутка, забей
Dmitry
так выпиливать или нет?